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