我正在尝试从服务器 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
)。