我正在尝试使用 SSH 代理转发来配置部署CentOS 上的脚本。我将公钥复制到计算机上我的用户的authorized_keys
文件中。我能够成功地使用部署用户登录服务器,而无需密码提示(并且部署用户的密码被锁定,例如)。~/.ssh
deploy
server
passwd -l deploy
请记住,我的 .ssh 目录仅包含authorized_keys 文件:
deploy@server $ ls
authorized_keys
现在我需要部署用户从服务器访问我的 git 存储库。解决方案是 SSH 代理转发。我应该能够通过在服务器上执行以下操作来通过服务器访问存储库:
# List SSH keys that are loaded into the agent
deploy@server $ ssh-add -l
# Make sure they key is loaded if 'ssh-add -l' didn't show anything
deploy@server $ ssh-add
deploy@server $ ssh -A [email protected] 'git ls-remote [email protected]:capistrano/rails3-bootstrap-devise-cancan.git'
问题是 ssh-add 无法加载密钥:
deploy@server $ exec ssh-agent bash
deploy@server $ ssh-add -l
The agent has no identities.
deploy@server $ ssh-add
deploy@server $ echo $?
=> 1
它打印 1。这意味着出现了问题。我有点困惑,因为文档指出我们可以使用 SSH 代理转发,所以我假设我们在部署的 .ssh 目录中不需要 id_rsa (私钥)。我刚刚将公钥从本地计算机复制到服务器的authorized_keys 文件中,然后我应该能够使用 SSH 代理转发来验证 git 存储库。然而,ssh-add 似乎需要存在私钥。文档从未提到我必须在我的服务器上创建私钥。
我哪里错了?
答案1
我认为你认为你必须跑步是错误的ssh-add
在服务器上。
authorized-keys
如果您的客户端计算机(即具有与 上文件中的公钥对应的私钥的计算机server
)启动 ssh 连接,则应启用身份验证代理转发。您可以通过指定-A
为参数来在命令行上执行此操作ssh
,或者通常通过编辑/etc/ssh/ssh_config
或~/.ssh/config
(对于连接到 的用户server
)指定:
ForwardAgent yes
出于安全原因,通常将其设置为no
。
ssh-add
继续运行server
是没有必要的。它以 1 退出的原因是它找不到要添加(和转发)的私钥。如果您ssh-add
在客户端计算机上运行(作为建立连接的用户),那么您将看到如下所示的行:
Identity added: /home/your_user/.ssh/id_rsa
此类文件在~/deploy/.ssh
机器上不可用server
而且你还必须确保你的 git 服务器安装了你的公钥。