是否可以有多个 SSH 主机别名?

Naf*_*Kay 5 ssh

我有一台笔记本电脑,显然有时可以在我的家庭网络内部或外部。当我需要通过 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,而无需我输入长主机名?

slm*_*slm 4

方法#1 - ProxyCommand 和 netcat

我在我的中使用这个设置$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 ( )。

方法#2 - 嵌套 ssh

或者,您也可以使用此方法:

$ ssh -t -l gatewayuser gatewayserver "ssh -l serveruser internalserver"
Run Code Online (Sandbox Code Playgroud)

您基本上是在这个方法中嵌套 SSH 调用。

方法 #3 - ProxyCommand & ssh -W

对于较新版本的 SSH (5.4+),您可以使用ssh而不是nc通过-W交换机。

Host TARGETHOST
ProxyCommand ssh -W %h:%p PROXYHOST
Run Code Online (Sandbox Code Playgroud)

&是用于 的主机名端口的宏%h%pTARGETHOST