如何在SSH会话中转发本地密钥对?

76

我通过SSH手动部署网站,使用github/bitbucket管理源代码。对于每个新站点,我当前会在服务器上生成一个新的密钥对,并将其添加到github/bitbucket中,以便我可以从服务器上拉取更改。

我在capistrano中发现了一项功能,即使用本地计算机的密钥对来拉取更新到服务器,这是ssh_options[:forward_agent] = true

我该如何做类似的事情并将我的本地计算机的密钥对转发到我正在SSH登录的服务器,以便我可以避免为每个新站点添加密钥。

5个回答

93

这实际上非常简单,完整指南在使用SSH转发这里。

本质上,如果没有存在,您需要创建~/.ssh/config文件。

然后,在文件中添加主机(可以是域名或IP地址),并设置ForwardAgent yes

示例代码:

Host example.com
    ForwardAgent yes
使SSH的使用更加轻松。

11
回答中有一个很棒的文章链接;简而言之,对于Mac用户来说,您可能需要执行sudo vim /etc/ssh_config并删除ForwardAgent no主机通配符禁用,然后执行ssh-add ~/.ssh/your_key以允许本地代理转发该身份验证信息。 - cfeduke
如果您使用公共 IP ssh node-1.example.com 连接并尝试使用代理跳转 ssh ${user}@$(hostname -s),那么添加 echo 'Host example.com\n ForwardAgent yes' >> ~/.ssh/config 将不起作用。它会要求您输入密码。 - Dimitri Kopriwa
10
在我的OSX El Capitan系统上,我不需要修改/etc/ssh_config文件,但我确实需要在转发之前运行“ssh-add”命令才能使其工作。 - Randy L

55
  1. 创建 ~/.ssh/config 文件
  2. 在文件中添加以下内容 (host address 是你想允许凭证转发到的主机地址):

    Host [host address]
         ForwardAgent yes
    
  3. 如果您尚未运行ssh-agent,请运行它:

  4. ssh-agent
    
    将该命令的输出粘贴到终端中。这将设置需要设置的环境变量以使代理转发起作用。可选择地,您可以使用以下内容替换此步骤和第3步:

    eval "$(ssh-agent)"
    
  5. 添加您想要转发到ssh代理的密钥:

  6. ssh-add [path to key if there is one]/[key_name].pem
    
  7. 登录远程主机:

  8. ssh -A [user]@[hostname]
    
  9. 从这里开始,如果您登录到另一台接受该密钥的主机上,它将可以正常工作:

  10. ssh [user]@[hostname]
    

10
对于一次性的操作,只需简单地运行 ssh -o ForwardAgent=yes root@x.x.x.x - deed02392

8

如果您想使用默认身份(id_rsa)来使用它,可以使用以下命令:

ssh-add
ssh -A [username]@[server-address]

1
这正是我需要的!ssh-add就是答案。谢谢 - HerberthObregon

1
配置文件非常有用,但代理转发的技巧需要使用ssh-add命令。似乎这必须在任何远程连接之前或计算机重启后初始触发。要永久添加密钥,请尝试用户daminetreg提供的以下解决方案: 在Ubuntu上使用ssh-add永久添加私钥

-1

这是非常有用的:

ssh -i [私钥] -A [用户]@[主机]

你可以在bash_aliases或其他命令例程中设置一个命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接