![ssh-config 多跳隧道](https://linux22.com/image/1519821/ssh-config%20%E5%A4%9A%E8%B7%B3%E9%9A%A7%E9%81%93%20.png)
我在 hostD 上有一个 mysql 服务器。我可以通过 hostC 访问 hostD,通过 hostB 访问 hostC,通过 hostA 访问 hostB,并且我使用家用设备上的 putty 访问 hostA
home(windows)-->hostA-->hostB-->hostC--hostD(mySQL Server)
我的目标是从我的家用设备访问服务器。
另一个挑战是我在 A、B 和 C 上没有任何 root 访问权限。现在我一直在试验“.ssh/config”文件,这是我目前得到的结果:
Host BTunnel
HostName hostB
LocalForward 3306 localhost:3306
Host CTunnel
HostName hostC
LocalForward 3306 localhost:3306
Host DTunnel
HostName hostD
LocalForward 3306 localhost:3306
这样我就可以从 Putty--> hostA 连接并连续输入:
ssh BTunnel
ssh CTunnel
ssh DTunnel
建立从 A 到 D 的隧道。但我想要一个解决方案,我只需要从主机 A 输入 1 个命令即可建立到 D 的隧道,也许可以通过链接现有的主机别名来实现。
有人能提供解决方案吗?
答案1
好吧,您可以直接链接命令。即使没有任何配置文件,您也可以这样做。在 hostA 上执行:
ssh -L 3306:localhost:3306 hostB ssh -L 3306:localhost:3306 hostC ssh -NL 3306:localhost:3306 hostD
如果您有配置和公钥,您可以执行以下操作:
ssh BTunnel ssh CTunnel ssh -N DTunnel
(我会在最后一个命令中包含 -N 因为我不需要 shell 访问权限,只需要转发。)您可以在 .bashrc(或类似文件)中为其创建别名:
alias mytunnel="ssh BTunnel ssh CTunnel ssh -N DTunnel"
您现在就可以开始使用 mytunnel。