目前我有以下 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.pem
ssh_config
如果你同意这一点,那么你可以通过添加以下代码片段my-secret2.pem
来指定ssh_config
前Host 172.30.*
您已经拥有的区块:
# Special hosts, new identity file.
Host 172.30.10.*
IdentityFile /home/ehud/.ssh/my-secret2.pem
对于每个参数,将使用第一个获得的值。配置文件包含由
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
。
这样您就可以手动加载完全不同的配置。