从我已 ssh 连接的机器上进行 ssh

从我已 ssh 连接的机器上进行 ssh

我正在尝试从一台机器(我们称之为B)通过 ssh 连接到另一台机器(我们称之为A),然后在该机器上运行一个命令( ),该命令通常需要输入 ssh 密码(如果您有兴趣,我正在尝试从 BitBucket 上的私有存储库执行此操作)Bgit pull

我可以B通过ssh 进入A(无需输入密码),并可以在该机器上运行命令,如下所示:

A > ssh B 'ls'

我还可以B从ssh 进入A,并运行我的git pull,它会要求输入密码:

A > ssh B
B > git pull
Enter passphrase for key '/home/username/.ssh/id_rsa': 

但是,如果我尝试 git pull (这需要密码),就会发生以下情况:

A > ssh cbc 'git pull'
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

你知道怎样才能git pull在没有密码的情况下开始工作AB

答案1

设置ssh-agent(或同等设置),然后启用代理转发用于 SSH 连接。

在本地机器上启用 ssh-agent

“本地” 就是你所在的那个。你不需要在其他地方运行代理。

如果您很幸运,那么其中一个实例已经在运行;大多数 Linux 发行版会为每个 X11 会话启动一个实例。运行ssh-add以导入您的密钥;ssh-add -l列出密钥。

如果使用 GNOME 或 Mac OS X,您可能会有自己的代理实现,它会在登录时导入已知密钥。ssh-agent但是,使用标准 OpenSSH 时,您必须手动执行此操作(尽管存在脚本和 PAM 模块来自动化)。

在 Windows 上,PuTTY 自带盛会,并且与 Cygwin 的 OpenSSH 相同ssh-agent(尽管使用起来比在 Unix 中复杂得多)。

启用代理转发

一旦代理开始工作并且密钥已加载,请尝试像这样连接:

A> ssh-add -l

A> ssh -A B ssh-add -l

-A选项通过 SSH 连接启用代理转发,因此如果一切正常,上述两个命令都应给出相同的输出。

$ ssh-添加-l
2048 06:b7:29:1e:6b:ea:c3:04:c4:33:fc:48:e0:62:2f:ef grawity@anywhere(旧密钥)(RSA)
4096 19:3c:f0:79:32:00:fa:04:2f:15:5d:2a:e2:c9:a3:ad grawity@anywhere (2011-11-01) (RSA)

$ ssh panther ssh-add -l
无法打开与您的身份验证代理的连接。

$ ssh-Apanther ssh-添加-l
2048 06:b7:29:1e:6b:ea:c3:04:c4:33:fc:48:e0:62:2f:ef grawity@anywhere(旧密钥)(RSA)
4096 19:3c:f0:79:32:00:fa:04:2f:15:5d:2a:e2:c9:a3:ad grawity@anywhere (2011-11-01) (RSA)

如果有效,请通过编辑使其持久化~/.ssh/config– 将其放在底部:

Host *
    ForwardAgent yes

相反,*您可以给出可信名称的列表;请参阅手册页以ssh_config了解确切的语法。

您可以启用转发全部机器;对于您可以链接的数量没有限制。

相关内容