我有两台机器,都位于 NAT 后面。而且我可以从每台机器访问服务器。有没有办法通过服务器从机器 1 到机器 2 建立 ssh 隧道?
客户端机器是 Linux Mint。服务器是 Debian。我在所有机器上只有用户访问权限
答案1
我知道这是怎么做的。
所以你有 3 台电脑。A、B、C
A、B 位于 NAT 后面。假设 B 是中间方
方法 1
2条隧道
因此,您可以建立从 A 到 B(隧道 1)的 SSH 连接。然后从 C 到 B(隧道 2)。并将隧道 1 转发到隧道 2。
计算机A使用SSH -L连接
计算机C使用SSH -R连接
-L 或 -R 决定隧道的哪一侧监听以及哪一侧转发。
因此,除非我犯了错误,否则你可以这样做-
A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB
但我不确定您是否可以与同一个 SSH 服务器建立两个连接,因此请尝试这个..建立两个不同的 sshd 服务器..
在 CompB 上编辑 sshd_config 你会看到它显示端口 22,在其下方添加一行显示端口 222,然后 CompB 将在两个端口上运行 ssh 服务器。
然后你可以通过两个不同的端口 22 和 222 连接到 ssh 服务器
A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222
端口 1234 是计算机 A 上连接客户端程序的端口,它是隧道 1 的入口
端口 2345 是计算机 B 上的端口,也是隧道 2 的入口
端口 3456 是您在 CompC 上运行服务器程序的端口
因此,通过这种方式,CompA 可以通过 CompB 连接到 CompC 上的服务器
方法 2
一条隧道
一种选择是只使用一个隧道,但这样你只能在半条路线上获得加密。5.6.7.8 是 CompC 的 IP,端口 3456 是 CompC 上的服务器,端口 1234 是隧道的监听端口。
A$ ssh -L 1234:5.6.7.8:3456 user@compB
然后在 CompA 上将客户端程序连接到 CompA 上的端口 1234,然后所有内容都会转到 CompC。
答案2
根据答复巴洛普
我有 A 和 B,它们位于 NAT 后面。还有 C,它们可以从 A 和 B 访问
在 CI 上,仅需具有 ssh 访问权限。无需其他任何操作。
在机器 A 上添加任务到 crontab
$crontab -e
TUNCMDR='ssh -f -N -R 1144:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1143 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
在机器 B 上将任务添加到 crontab
$crontab -e
TUNCMDR='ssh -f -N -R 1143:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1144 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
注意:与主机 A 相比,主机 B 上的 1143 和 1144 端口已更改
在主机上A
连接到B
您运行ssh -p 1234 Buser@localhost
在主机上B
连接到A
您运行ssh -p 1234 Auser@localhost
在主机上C
连接到A
您运行ssh -p 1144 Auser@localhost
在主机上C
连接到B
您运行ssh -p 1143 Buser@localhost
您可以看到正在运行的重新连接信息cat ~/ssh-world.log
更新型多巴胺
通过添加到 ~/.ssh/config 来停止会话断开/挂断
Host *
ServerAliveInterval 15