使用 OpenSSH 的 SSH 中继服务器

使用 OpenSSH 的 SSH 中继服务器

是否可以使用 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

相关内容