是否有可能使用OpenSSH中继到其他启用SSH的设备,如路由器交换机等。如果是这样的事情可以做,而不需要在Linux上创build一个定制的应用程序来做到这一点?
谢谢
当然; 只需使用SSH端口转发/隧道。 使用以下命令启动到“代理”机器的ssh连接:
ssh -L$LOCALPORT:$REMOTEHOST:$SSHPORT $PROXYHOST
$PROXYHOST :你有SSH访问的机器 $REMOTEHOST :$ PROXYHOST可以连接的机器,但是你不能。 使用$PROXYHOST可以用来引用机器的主机名或IP $SSHPORT :sshd在$SSHPORT上侦听的端口; 最有可能的是22 $LOCALPORT :本地出站端口SSH在您的本地机器上打开,转发到$REMOTEHOST端口22 离开这个连接,以保持隧道的工作。 您可能还需要将-N添加到该命令中,以便此连接不会启动远程shell,并且以后不会意外closures它。
一旦build立隧道,请执行以下操作:
ssh -p $LOCALPORT localhost
这会尝试在转发到$REMOTEHOST的SSH端口的端口上连接到本地计算机的SSH连接。
如果您愿意更新您的客户端上的configuration,您可以设置您的客户端使用您的网关盒作为代理 。 您的中继箱将需要安装netcat,为了获得最佳效果,您将需要基于密钥的身份validation设置。
这是我在.ssh / config中通过另一个主机连接的东西。
Host internal-ssh-host-proxy ProxyCommand /usr/bin/ssh username@ssh-relay-host "/bin/netcat -w 1 internal-ssh-host 22"
通过以上操作,只需从客户端机器运行命令ssh internal-ssh-host-proxy即可 。
如果代理SSH主机具有OpenSSH客户端5.4或更高版本,则不需要netcat,而是可以使用内置的netcat模式。
Host internal-ssh-host-proxy ProxyCommand /usr/bin/ssh username@ssh-relay-host -W internal-ssh-host:22
在所提出的答案中,Zordache是最好的整体解决scheme。 然而,对于后人,如果你只是简单地想连接ad-hoc而不编辑你的configuration,那么使用-t标志来分配一个伪terminal,并在继电器上直接执行ssh。
ssh -t relay.example.com ssh internal.example.com
您可以使用OpenSSH自动转发连接。 在你的~/.ssh/authorized_keys文件中,你可以指定一个执行的命令,这个命令可能是第二台机器的SSH。
[ssh client] ----> [ssh relay server] ----> [ssh target server] you modified authorized_keys target machine
最后你会看到两个提示Password: ::一个用于中继服务器,另一个用于目标服务器。 您始终可以使用证书删除此行为。