如何让 ssh 根据我选择的用户使用不同的身份文件?

  • 本文关键字:身份 文件 用户 ssh 选择 ssl ssh
  • 更新时间 :
  • 英文 :


我找到了很多帮助,展示了如何配置.ssh/config以根据我要连接的主机名选择identityFile,但我使用两个用户名中的一个连接到大量主机。我希望ssh识别我选择的用户名,并选择匹配的IdentityFile。

我试过这个:

Host admin@*
    IdentityFile ~/.ssh/admin_id_rsa
Host chintchary@*
    IdentityFile ~/.ssh/chintchary_id_rsa

使用ssh-v,我可以看到配置被忽略了。

您在以下几个方面存在语法错误:

  • 键和值之间没有冒号:
  • User不是Host的一部分,但可以使用Match块进行匹配

你的配置应该是这样的:

Match user admin
    IdentityFile ~/.ssh/admin_id_rsa
Match user chintchary
    IdentityFile ~/.ssh/chintchary_id_rsa

所有这些都可以从ssh_config(5)的手册页面上阅读。之后,确保您的文件已被读取。对于您的版本,它应该大声抱怨糟糕的语法。

旧openssh的替代方案

如果您的openSSH版本不支持Match块,那么您需要使用bash函数进行一些丑陋的破解,比如:

ssh(){
  expr match "$@" '.*admin@.*' && I="-i ~/.ssh/admin_id_rsa"
  expr match "$@" '.*chintchary@.*' && I="-i ~/.ssh/chintchary_id_rsa"
  /usr/bin/ssh $I $@
}

最新更新