我正在尝试从一台机器(我们称之为B
)通过 ssh 连接到另一台机器(我们称之为A
),然后在该机器上运行一个命令( ),该命令通常需要输入 ssh 密码(如果您有兴趣,我正在尝试从 BitBucket 上的私有存储库执行此操作)B
。git 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
在没有密码的情况下开始工作A
吗B
?
答案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
了解确切的语法。
您可以启用转发全部机器;对于您可以链接的数量没有限制。