SSH 配置文件 - 同一主机组的多个用户

SSH 配置文件 - 同一主机组的多个用户

目前我有以下 ssh 配置文件:

Host 172.30.*
  ControlMaster auto
  ControlPath ~/.ssh/cm_socket/%r@%h:%p

  ServerAliveInterval    60
  TCPKeepAlive           yes
  ProxyCommand           ssh -i /home/ehud/.ssh/my-secret1.pem -q -A [email protected] nc %h %p
  ControlMaster          auto
  ControlPath            ~/.ssh/mux-%r@%h:%p
  ControlPersist         8h
  User                   ubuntu
  IdentityFile           /home/ehud/.ssh/my-secret1.pem

现在我在同一个子网 (172.30.*) 中还有其他机器,但它们有不同的机密 pem 文件。我想添加具有不同机密 pem 文件的相同配置,并使用一些标志调用 ssh,这些标志会将我重定向到正确的机密文件。

是否可以??

谢谢

答案1

ssh -i '/home/ehud/.ssh/my-secret2.pem' …
ssh -o 'IdentityFile=/home/ehud/.ssh/my-secret2.pem' …

上述任一命令都会my-secret2.pem首先加载文件,但由于您可以指定多个身份文件(请参阅man 1 ssh,选项),您给出的-i文件也可能会被尝试。您可能想要或不想要这个。my-secret1.pemssh_config

如果你同意这一点,那么你可以通过添加以下代码片段my-secret2.pem来指定ssh_configHost 172.30.*您已经拥有的区块:

# Special hosts, new identity file.
Host 172.30.10.*
  IdentityFile           /home/ehud/.ssh/my-secret2.pem

man 5 ssh_config说:

对于每个参数,将使用第一个获得的值。配置文件包含由Host规范分隔的部分,并且该部分仅适用于与规范中给出的模式之一匹配的主机。匹配的主机名是命令行中给出的主机名。

由于使用了每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。

对于任何只能指定一次的参数,首先匹配特殊主机,然后匹配整个范围就足够了172.30.*。这并不明显,但“将使用第一个获得的值”并不适用,IdentityFile因为您可以指定多个文件。要使您的特殊主机不是使用该my-secret1.pem文件时,您需要有关感叹号 ( !) 用法的额外知识。

示例片段ssh_config

# Special hosts, new identity file.
Host 172.30.10.*
  IdentityFile           /home/ehud/.ssh/my-secret2.pem

# Non-special hosts, old identity file.
Host 172.30.* !172.30.10.*
  IdentityFile           /home/ehud/.ssh/my-secret1.pem

# Special and non-special hosts, like in your old config.
# Note there is no IdentityFile line here anymore.
# If there was, it would apply to special and non-special
# hosts, despite some previous IdentityFile line alrady loaded.
Host 172.30.*
  ControlMaster auto
  ControlPath ~/.ssh/cm_socket/%r@%h:%p

  ServerAliveInterval    60
  TCPKeepAlive           yes
  ProxyCommand           ssh -i /home/ehud/.ssh/my-secret1.pem -q -A [email protected] nc %h %p
  ControlMaster          auto
  ControlPath            ~/.ssh/mux-%r@%h:%p
  ControlPersist         8h
  User                   ubuntu

现在如果你例如ssh -v 172.30.10.22(特殊主持人),你会看到类似的内容:

debug1: /etc/ssh/ssh_config line X: Applying options for 172.30.10.*
debug1: /etc/ssh/ssh_config line Y: Skipping Host block because of negated match for 172.30.10.*
debug1: /etc/ssh/ssh_config line Z: Applying options for 172.30.*

并且ssh -v 172.30.99.33(非特殊主机)将打印:

debug1: /etc/ssh/ssh_config line Y: Applying options for 172.30.*
debug1: /etc/ssh/ssh_config line Z: Applying options for 172.30.*

因此无论哪种方式都.pem只会使用一个文件。

也有-F选项ssh。从man 1 ssh

-F configfile
指定备用的每个用户配置文件。如果在命令行中给出了配置文件,则将忽略系统范围的配置文件 ( /etc/ssh/ssh_config)。每个用户配置文件的默认值为~/.ssh/config

这样您就可以手动加载完全不同的配置。

相关内容