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