ssh 和 git 从远程服务器拉取

ssh 和 git 从远程服务器拉取

我正在尝试从服务器 1 ssh 到服务器 2 以及git pull从服务器 1 ssh 到服务器 2。

因此在服务器 1 上,我运行以下命令:

ssh root@server2 'cd /root/.example; git pull origin master'

但这给了我这个错误:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights

它能够使用 ssh,因为当我执行 ls ( ssh root@server2 'cd /root/.example; ls) 时,我可以看到目录的内容/root/.example。但它无法执行,git pull origin master因为它使用了错误的密钥。

我能做些什么不同的事情?

我正在使用 Centos 6。

答案1

您需要通过 ssh 连接到有权访问 git 存储库的用户。如果您要通过 ssh 连接到 root,请确保 root 至少具有 repo 的权限(以防您使用某些智能版本的 git,如 gitolite、gitlab 等)。

顺便说一句,如果你想用这个进行发布,请使用git fetch && git reset --hard origin/master而不是 git pull。Git pull 进行合并,但可能会以冲突告终,git reset 只是将实际的头指针移动到不同的提交,而不会合并任何内容。

答案2

SSH 代理转发

ssh 默认不进行代理转发。因此,尽管您在客户端上使用 ssh-agent 加载了 ssh 密钥,但无法在 ssh 会话中的远程计算机上“重复使用”该密钥。

您可以使用 手动使其在目标上可用-A,但首先请阅读手册页中的安全警告(如下)

以下使用代理转发,远程 ssh 到 github。如果远程主机在攻击者的控制下,他们可以使用你的 ssh 代理“以你的身份”访问其他系统:

ssh -A root@server2

man ssh

-A启用从身份验证代理(如 ssh-agent(1))转发连接。 也可以在配置文件中按主机指定此功能。

应谨慎启用代理转发。能够绕过远程主机上的文件权限(对于代理的 UNIX 域套接字)的用户可以通过转发的连接访问本地代理。攻击者无法从代理获取密钥材料,但他们可以对密钥执行操作,使他们能够使用加载到代理中的身份进行身份验证。更安全的替代方案可能是使用跳转主机(请参阅-J)。

相关内容