【问题标题】:cannot push to branch on gitlab with ssh无法使用 ssh 推送到 gitlab 上的分支
【发布时间】:2019-11-23 05:53:14
【问题描述】:

我是 gitlab 的新手,这是我第一次使用 ssh。我可以生成 ssh 密钥并将其添加到我的帐户设置中。我可以通过 ssh 克隆 repo,我可以结帐到我的分支,但我仍然不能做的就是将我的更改推送到分支。这是我生成 ssh 密钥的一步一步,直到我尝试推送它(按照here 中的说明进行操作):

PS。我正在使用 Windows 10。

  • 在终端上(以管理员身份),输入:ssh-keygen -o -t rsa -b 4096 -C "myemail@example.com"
  • Enter 获取 ssh 密钥的默认路径
  • 提供密码
  • ~/.ssh/ 中创建配置文件。这是我在配置文件中写的:

Host ahostname Hostname myhostname.com User mygitlabusername Port port PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa

  • 使用以下命令复制 ssh 密钥:cat ~/.ssh/id_rsa.pub | clip
  • 将 ssh 密钥放入我的帐户设置中
  • 然后,运行ssh -T git@myhostname.com,结果如下:

The authenticity of host '[myhostname.com]:port ([123.456.789]:port)' can't be established. ECDSA key fingerprint is SHA256:xxxx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[myhostname.com]:port ([ipofmyshost]:port)' (ECDSA) to the list of known hosts. Enter passphrase for key 'C:~/.ssh/id_rsa': Welcome to GitLab, <myusername>!

  • 然后我尝试克隆一个 repo:git clone ssh://git@myhostname.com/repo.git
  • 但是,显然,在克隆时,它引用了另一个 IP 地址。例如,假设ssh -T git@myhostname.com 上的ipofmyhost123.456.789。然后,当我克隆的时候,IP变成了123.456.781(抱歉我不能提真实IP)。所以,这是我在尝试克隆 repo 时得到的结果:

Warning: Permanently added the ECDSA host key for IP address '[123.456.781]:port' to the list of known hosts. Enter passphrase for key '/c/.ssh/id_rsa':

  • 但是,克隆完成了,然后我用git checkout mybranchname 结帐到我的分支
  • 现在,我在我的分支机构。做一点改变。尝试push,但这是我得到的错误:

git@myhostname.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.

我在这里错过了什么?我找到了this 问题,但很抱歉,我不明白接受的答案建议我如何解决这个问题。

更新

我尝试再次重新克隆,但在此之前,我删除了所有known_host。然后,再次执行git clone 而不使用ssh -T git@myhostname.com 进行测试,以避免创建新的IP 地址。但是,即使没有新的 IP 地址添加到 known_host,我在推送我的分支时仍然遇到同样的错误。

【问题讨论】:

    标签: git ssh gitlab


    【解决方案1】:

    使用创建的 SSH 密钥再试一次,没有密码。

    或者,首先,确保您已将密钥添加到 ssh-agent with ssh-add
    见“Working with non-default SSH key pair paths

    您可以“Auto-launching ssh-agent on Git for Windows”(GitHub 说明,但对 GitLab 也有效)

    【讨论】:

    • 我已经尝试使用 ssh-add,但是当它执行时,结果是“没有这样的文件”,但我 100% 确定该文件存在。所以,我尝试在没有密码的情况下创建新的 SSH 密钥,它成功了!!!!你知道为什么会这样吗?我认为,通过提供密码会更安全,对吧?
    • @Akza 在help.github.com/en/articles/… 之后,ssh-add 与您的私钥一起用作参数:ssh-add ~/path/to/my_key。但是,如果您一开始就没有密码……这会更简单!
    • 嗯,是的,它更简单,哈哈。但是,我可以再问一件事吗?我可以为两个设备使用相同的密钥吗?假设我在 Windows 上生成了第一个密钥,现在它已成功链接。现在,我希望我的 mac 也可以访问 repo。我是否必须在我的 Mac 上生成新密钥并将其再次添加到我的个人资料中?或者我可以将密钥从我的 Windows 复制到我的 Mac 吗?所以我不必向我的帐户添加新的 ssh 密钥
    • @Akza 最好为第二个设备生成一个新密钥,而不是复制第一个密钥。那是因为这些密钥是私有的:只要它们被复制,它们就“不那么私有”了。
    • @Akza Plus,您可以轻松撤销一个,而不会使每个设备的访问权限无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多