我正在尝试通过双跳设置 ssh 会话,每跳都有不同的用户,以便通过 fish/sftp 轻松传输文件。
我的 .ssh/config 看起来像
Host middle_server
User foo
Hostname 192.168.xx.xx
Host www.server.org target
User bar
HostName www.server.org
ProxyCommand ssh middle_server nc %h %p 2> /dev/null
与中间服务器的连接由 rsa 密钥保护,并且从中间服务器直接与 bar 用户建立目标连接。
当我尝试连接到目标时,出现以下错误:
[foo@localhost]$ ssh target
Enter passphrase for key '/home/foo/.ssh/id_rsa':
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
我可以使用以下两种方法进行连接,因此我猜测 bar 用户不用于第二跳,但我不知道可能是什么原因造成的。
[foo@localhost]$ ssh middle_server
Enter passphrase for key '/home/foo/.ssh/id_rsa':
[foo@middle_server ~]$ ssh [email protected]
[bar@www ~]$
或者
[foo@localhost]$ ssh -A -t foo@middle_server ssh -A [email protected]
Enter passphrase for key '/home/foo/.ssh/id_rsa':
[bar@www ~]$
如能得到任何帮助我们将不胜感激,提前谢谢!
答案1
当你使用ProxyCommand
你的当地的机器与目标主机建立连接。由于您要创建从中间到目标的连接,因此不应使用它(或不应将其与 一起使用nc
)。
我不会使用,ForwardAgent
因为它不是完全安全的(中间机器上的用户可以使用您在本地机器上root
使用的密钥对数据进行编码)。ssh-agent
ssh
因此,一个可能的解决方案是在中间机上运行命令来在ProxyCommand
本地机器内的目标机器。例如:
ssh bar@doesnt_matter_host_here -o ProxyCommand='ssh foo@middle_server "ssh [email protected] nc localhost 22"'
ProxyCommand
您可以在您的上配置一个名为“www_over_middle”的主机~/.ssh/config
:
Host www_over_middle
User bar
ProxyCommand ssh foo@middle_server "ssh [email protected] nc localhost 22"
进而:
ssh www_over_middle