是否可以使用没有主机名的默认 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.de
或ssh 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
。