我正在寻找一种在使用特定用户名登录远程主机时设置特定 SSH 密钥的方法。这可以在 SSH 配置文件中实现吗?
例如:
使用密钥“id_rsa-test”作为用户名“testuser”:
ssh testuser@host1
ssh testuser@host2
ssh testuser@host3
对所有其他用户使用密钥“id_rsa”。
ssh root@host1
ssh admin@host2
ssh [email protected]
有没有办法配置这个?
答案1
谢谢@xhienne(评论链接)为您的建议。
将以下内容添加到 ssh_config 似乎已经解决了问题:
Match User testuser
IdentityFile ~/.ssh/id_rsa-test
该块应放置在上面Host *
以id_rsa-test
提前发送id_rsa
给测试用户。
答案2
假设您使用 OpenSSH,您可以~/.ssh/config
为每个文件配置文件,那么您也不必指定用户,您可以创建自己的名称:
host host1
User testuser
IdentityFile ~/.ssh/id_rsa-test
那么当你这样做时,ssh host1
它会自动执行,或者,因为你host1
也将作为其他用户使用,所以你可以这样做
host test-host1
User testuser
IdentityFile ~/.ssh/id_rsa-test
Hostname host1
然后做ssh test-host1
您可以对每个您想要的主机执行相同的操作。
任何与 ssh_config(5) 文件中的条目不匹配的主机都将使用默认行为,或者使用全局设置中 ssh_config 中指定的默认值,即不在主机块内
ssh_config 不支持用户名匹配,但您可以编写一个 shell 脚本来为您检测。这是 bash 中的一个脆弱的例子,它假设你的用户名/主机始终是第一个参数,如果不是,就会中断:
ssh() {
if [[ "$1" =~ ^testuser@ ]]; then
command ssh -i ~/.ssh/id_rsa-test "$@"
else
command ssh "$@"
fi
}