我有一台笔记本电脑,显然有时可以在我的家庭网络内部或外部。当我需要通过 SSH 连接到网络内的计算机时,连接相当简单:
localhost $ ssh machinelearning
当我尝试从以下位置访问机器时外部我的网络,然后我需要连接到我的路由器,然后从那里连接 SSH:
localhost $ ssh router.mytotallyuniquedomain.com
router $ ssh machinelearning
我记得有一个执行后一个命令的快捷方式~/.ssh/config
,但目前我不记得它是什么。
有没有办法让我提供多个主机名或连接类型,以便当我这样做时:
$ ssh machinelearning
SSH 将首先尝试连接到machinelearning
本地网络中的主机,然后尝试通过隧道进入router.mytotallyuniquedomain.com
,所有这些都不需要我输入长主机名?
答案1
方法#1 - ProxyCommand 和 netcat
我在我的中使用这个设置$HOME/.ssh/config
来促进这一点:
Host intserver1-o intserver2-o intserver3-o
ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p
然后我就可以ssh intserver2-o
从任何地方进入这个内部服务器。当我在家时使用 LAN ssh intserver1
。
笔记:上述技巧需要nc
在 extserver1 上安装 netcat ( )。
方法#2 - 嵌套 ssh
或者,您也可以使用此方法:
$ ssh -t -l gatewayuser gatewayserver "ssh -l serveruser internalserver"
您基本上是在这个方法中嵌套 SSH 调用。
方法 #3 - ProxyCommand & ssh -W
对于较新版本的 SSH (5.4+),您可以使用ssh
而不是nc
通过-W
交换机。
Host TARGETHOST
ProxyCommand ssh -W %h:%p PROXYHOST
&%h
是%p
用于 的主机名端口的宏TARGETHOST
。