有没有办法,在一个单一的命令,build立一个SSH连接从我的电脑A,通过计算机B,到电脑C,使我可以访问计算机C上的shell?
一个皱纹(这似乎排除简单地使用-L选项转发SSH连接)是我有密码到计算机B上的帐户,并且计算机B上的帐户被授权连接到计算机C上的帐户,但我没有计算机上的帐户密码
我明白,你只是想login到电脑C,不是真的隧道从A到C的任何东西。所以,这应该做的伎俩:
ssh -t computer-b "ssh computer-c"
您可能需要input两次密码,第一次input计算机B,然后input计算机C,但通过使用ssh的密钥对authentication可以避免这种情况。
您可能想要使用SSH的ProxyCommand: http ://benno.id.au/blog/2006/06/08/ssh_proxy_command
如果您使用的是ssh密钥,则可以为机器B生成一个新的密钥,并将其用于从A连接到B.在机器B上,您可以添加
command="ssh C" ssh-....
在~/.ssh/authorized_keys文件中。 这意味着只要你用这个ssh键连接到B,它就会执行ssh C命令。
我不知道这是否适用于scp。
ProxyCommand 见man ssh_config 。 我build议使用ProxyCommand 。 让我们把你原来的场景:
用下面的内容编辑~/.ssh/config 。
Host computerb HostName <hostname or IP of Computer B> Host computerc 192.168.35.* ProxyCommand ssh computerb nc -w 180 %h %p
现在你可以透明地到达计算机C.
ssh computerc
您只需要您的私钥在计算机A(您的计算机)上。 nc命令将充当SSH将encryptionstream量的代理。 这包括authentication。 将您的私钥分配给多个服务器是一个非常糟糕的主意(因为使用您的私钥破解的服务器最终会危及您的私钥)。
可以使用Host匹配多个目标计算机。 单个计算机或特定networking内的任何计算机(例如上例中的192.168.35.0/24 )通过计算机B进行代理。它也可以作为别名。
ssh 192.168.35.27
在上面的例子中,它将通过计算机B代理到IP地址。
使用此方法,您可以根据需要菊花链式连接尽可能多的自动代理。 例如,您可以添加只能从计算机C访问的计算机D ,并且它将透明地工作。
Host computerd ProxyCommand ssh computerc nc -w 180 %h %p
在上面的ssh_config例子中, ssh computerd将通过计算机C和计算机B自动代理。