在 ssh 配置文件中,我可以使用“Host”作为参数吗?如果不行,我该如何让 ssh 配置文件接受参数?

在 ssh 配置文件中,我可以使用“Host”作为参数吗?如果不行,我该如何让 ssh 配置文件接受参数?

在 .ssh/config 文件中

场景是我现在有两个公共 IP(动态),一个连接到 aws,一个连接到 rackspace

两者都需要不同的 pem 密钥才能连接。但我想使用 ssh 配置文件来节省时间

Host <ip1> 
User root
Port 22
HostName %h
IdentityFile ~/.ssh/aws.pem

Host <ip2> 
User root
Port 22
HostName %h
IdentityFile ~/.ssh/rackspace.pem

从此设置中,我无法区分要使用哪个 pem 文件。我想利用主机作为参数的一部分来指定要连接的服务器,例如 ssh aws-ip1 ssh rack-ip2

然后配置文件可以区分使用哪个 pem 文件

有人知道怎么做吗?

答案1

好吧...这个问题很老了。但我能想到一种方法来解决这个问题。在这里使用通配符(*)和%h参数。

假设 Amazon 的 IP 为 10.10.20.*,Rackspace 的 IP 为 20.20.10.*。以下配置将有所帮助:

Host 10.10.20.*
    Hostname %h
    User root
    IdentityFile ~/.ssh/aws.pem

Host 20.20.10.*
    Hostname %h
    User root
    IdentityFile ~/.ssh/rackspace.pem

然后调用,比如说ssh 10.10.20.5会调用类似的内容,这可能正是所需要的。ssh -i ~/.ssh/aws.pem [email protected]

答案2

“主机”部分是一种您可以使用的“快捷方式”:

Host aws-ip1
    HostName ip-or-name-to-ip1
    IdentityFile ~/.ssh/aws.pem

Host rack-ip2
    HostName ip-or-name-to-ip2
    IdentityFile ~/.ssh/rackspace.pem

然后你只需使用ssh aws-ip1ssh rack-ip2...

引自man ssh-config

Host    Restricts the following declarations (up to the next Host key-
        word) to be only for those hosts that match one of the patterns
        given after the keyword.

答案3

另一个选择是使用普通的老式 shell 别名:

 alias ssh_rack="ssh -i .ssh/rackspace.pem"
 alias ssh_aws="ssh -i .ssh/aws.pem"

然后使用它们代替ssh

相关内容