SSH 配置主机匹配端口

SSH 配置主机匹配端口

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

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

答案1

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

Match host somehost exec "test %p = 42"
IdentityFile ...

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

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

ssh_config关键字Match已添加到 OpenSSH 6.5 或 6.6 版本中。检查ssh_config手册页以查看系统上是否可用。

答案2

您可以在文件中创建各种主机“别名” ~/.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

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

相关内容