使用不带主机名的 ssh 配置默认值

使用不带主机名的 ssh 配置默认值

是否可以使用没有主机名的默认 ssh 配置?当然我知道如何使用~/.ssh/config,但我想做类似的事情:

Host myservers
  User root
  IdentitiesOnly yes
  IdentityFile ~/.ssh/specialkey
  • ssh myservers server1.de
  • ssh myservers server2.de

但那行不通,所以我不能使用 ssh 配置并在之后定义服务器/主机名。这意味着现在我总是必须这样做,或者我在这里可以使用什么其他可能性?ssh -i ~/.ssh/specialkey -O IdentitiesOnly=yes [email protected]

答案1

修改代码片段以便它适用于相关主机:

Host server1.de server2.de
  User root
  IdentitiesOnly yes
  IdentityFile ~/.ssh/specialkey

然后你只需ssh server1.dessh server2.de

您可以向该Host行添加更多条目。如果设置应应用于具有通用命名方案的一组服务器,请考虑使用通配符。例如Host server*.de

确保在配置中尽早放置该代码片段(因为使用每个参数获得的第一个值)。肯定是在之前Host *


如果您想根据需要使用一些特殊配置,请将配置放在另一个文件中并使用ssh -F

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

来源

例子:

ssh -F ~/.ssh/myservers server1.de

笔记:

  • 该配置可能包含Host *唯一的部分,因此它适用于您想要的任何服务器。

  • 您可以创建两个或多个配置,每个配置都在一个单独的文件中,并在连接时选择您想要的配置。

  • 别名

    alias ssh-myservers='ssh -F ~/.ssh/myservers'
    

    将允许您按照您想要的方式进行连接:ssh-myservers server1.de

  • 包装器脚本或 shell 函数可让您完全按照需要进行连接。示例函数:

    ssh() {
       configfile=~/".ssh/$1"
       if [ -f "$configfile" ]; then
          shift; command ssh -F "$configfile" "$@"
       else
          command ssh "$@"
       fi }
    

    要连接,ssh myservers server1.de您需要进行配置~/.ssh/myservers

相关内容