SSH 配置主机匹配端口

Ric*_*ook 7 linux ssh openssh

我有一个运行多个“SSH 守护进程”的服务器(实际上是 Stash 和 OpenSSH),每个需要不同的 SSH 密钥。这些守护进程正在侦听 2 个不同的端口。

在客户端的 SSH 配置中(特别是~/.ssh/config),是否可以在Host/Match指令(或其他方式)中指定端口,以便我可以覆盖IdentityFile基于端口的?这样ssh myserver -p 22ssh myserver -p 23两者都将使用正确的密钥登录,无需额外配置。

Ken*_*ter 14

如果您的 ssh 客户端足够新,您可以使用 config fileMatch关键字根据目标端口进行条件配置。

Match host somehost exec "test %p = 42"
IdentityFile ...
Run Code Online (Sandbox Code Playgroud)

如果目标主机是“somehost”并且目标端口是 42,则上面的示例将仅应用“IdentityFile”行。 其Match工作Host方式如下(直到下一个 Match 或 Host 行)仅适用于匹配的会话标准。在示例中,Match 行检查主机是否为“somehost”,并且它还运行一个外部命令,如果该命令以状态 0 退出,则该命令被视为匹配。

这里运行的命令是test %p = 42. "%p" 将被 ssh 到那时使用的端口值替换(默认值 22 或命令行中的值)。test也被称为[; 它是一个命令行实用程序,主要在 shell 脚本中作为if语句的一部分使用。这里,test用于测试端口号是否为 42。

Matchssh_config中的关键字加入到OpenSSH的6.5版本或6.6。检查您的ssh_config手册页,看看它是否在您的系统上可用。


jjl*_*lin 6

您可以在文件中创建各种主机“别名” ~/.ssh/config,以引用同一服务器不同端口上的 SSH 守护程序。例如:

Host daemon1
HostName host.domain.com
Port 22
IdentityFile ~/.ssh/id_rsa_daemon1

Host daemon2
HostName host.domain.com
Port 23
IdentityFile ~/.ssh/id_rsa_daemon2
Run Code Online (Sandbox Code Playgroud)

然后您可以运行ssh daemon1ssh daemon2登录特定的 SSH 守护程序。