我正在尝试创建ssh隧道来访问只能通过另一台服务器(B)访问的远程服务器(A)。我在本地计算机(L)上有一个密钥可以到达中继服务器(B),在中继服务器(B)上还有另一个密钥可以到达目标服务器(A)。
[具有中继服务器(B)密钥的本地机器(L)]-> [具有目标服务器(A)密钥的中继服务器(B)]-> [目标服务器(A)]
我的本地计算机(L)上有一个〜/ .ssh / config文件,看起来像这样:
Host relay.server(B)
Hostname relay.server
Port 22
User me
IdentityFile ~/.ssh/id_rsa
Host destination.server(A)
Hostname destination.server
Port 1122
User me
IdentityFile ~/.ssh/id_rsa
我可以通过以下方式使我的隧道正常工作:
ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)
在我的本机(L)上执行命令:这会提示我输入密码以解锁第一个钥匙,然后似乎挂起,它没有返回提示,使用该-f
选项或以a结尾使&
我无法输入密码。但是,如果我^C
在输入密码后再输入此命令,然后输入,则系统ssh destination.server(A)
会提示我提供密码以解锁第二个密钥,然后我将其连接到目标服务器(A)。
我正在寻找一个命令,该命令可以让我从本地计算机(L)连接到目标服务器(A),并提示我提供解锁每个密钥所需的密码。或建议一种替代的组织方式,以便我可以通过中继服务器(B)从本地计算机(L)直接连接到目标服务器(A)。
简短的答案是您需要
ProxyCommand
使用nc
连接通过ForwardAgent
传递密钥.ssh/authorized_keys
所有服务器上的一部分Host relay Hostname relay.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ForwardAgent yes Host destination Hostname destination.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ProxyCommand ssh -q relay "nc %h %p" ForwardAgent yes
较长的部分。
ProxyCommand
每当使用该附件时,ssh config中的选项都会运行一个命令Host
。它通常与nc
nmap.org一起使用,也称为nmap,ncat
并且具有很多选项。
在Host destination
ssh config的上述条目中,ProxyCommand
设置为ssh -q relay "nc %h %p"
ssh静默中继并运行nc destination.server.fqdn.or.IP 22
。
nc
在传入的ssh和目标之间建立连接。
该ForwardAgent yes
告诉ssh来的键添加到一个ssh代理。ssh代理会跟踪密钥,并用于根据需要自动将正确的密钥传递给主机。该ForwardAgent yes
通知代理再次转嫁给继电器另一个代理键,然后到目的地。
现在,要使所有这些工作正常进行,您要跳过的每台服务器以及最终目的地必须在.ssh/authorized_keys
文件中具有与私钥(id_rsa)关联的公钥。当您创建私钥id_rsa时,还应该已经创建了一个公钥id_rsa.pub。
如果您没有公用密钥,则始终可以通过私钥从中获取,ssh-keygen -y -f ~/.ssh/id_rsa
以方便复制/粘贴。请注意,公共密钥具有2或3个以空格分隔的字段,但只有一行。
因此,请ssh relay
编辑~/.ssh/authorized_keys
(可能不存在,因此mkdir -p ~/.ssh
可能是必要的),然后将公钥粘贴到新行(或第一行,如果不存在的话)上。
在中继服务器上时,检查nc
/ bin或/ usr / bin中是否存在。如果不是,那么您将需要使用yum或apt-get包管理器进行安装。
在中继服务器上,ssh destination
对进行相同的更新~/.ssh/authorized_keys
。
exit
一直到您的本地计算机,您应该能够 ssh destination
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句