我有两台服务器,分别装有CentOS6和CentOS7。
它们都具有 SSH 访问权限。我的客户端计算机装有 Ubuntu 16.04。
对于 CentOS6 我可以使用命令登录
ssh -i ~/.ssh/serv1 root@serv1
但命令
ssh root@serv1
提示输入密码。对我来说没问题。
对于 CentOS7 我可以使用命令登录
ssh -i ~/.ssh/serv2 root@serv2
但命令
ssh root@serv2
不要提示输入密码。我也能成功登录。
当我从另一台计算机执行“ssh root@serv2”时,ssh 会提示输入密码,这没问题。
问题是:为什么我可以使用命令无需密码和 ssh 密钥登录到 serv2
ssh -i ~/.ssh/serv2 root@serv2
?
我找不到负责该问题的选项,也找不到这是 CentOS7 的标准行为。
如果需要更多信息请告诉我。
答案1
这是因为您已将您的身份(公钥)添加为 serv2 上的授权密钥/root/.ssh/authorized_keys
。有关此文件的更多信息,请参阅man sshd
部分。AUTHORIZED_KEYS FILE FORMAT
您的默认身份存储在~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_rsa, id_ed25519
以 .pub 结尾的文件和类似文件中,这些文件存储各自的公钥。当您尝试登录到任何远程 ssh 而不指定“-i”选项时,这些将提供给远程服务器。如果远程服务器在其下存储了其中任何一个,~/.ssh/authorized_keys
那么您可以使用该密钥登录(即无需密码)。因为基于密码和基于公钥是授权远程用户的两种不同方法。
当您指定“-i”选项时,您只是提供存储在该文件中的不同的公钥。
您也可以随时使用“-v”选项运行 ssh,以获取有关远程接受哪种密钥方法/公钥的更多详细信息。如本例所示:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/nstorm/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering ECDSA public key: /home/nstorm/.ssh/id_ecdsa
debug1: Server accepts key: pkalg ecdsa-sha2-nistp256 blen 104
debug1: Authentication succeeded (publickey).
Authenticated to 172.16.2.1 ([172.16.2.1]:22).
如果您不想在不使用“-i”选项设置非默认身份的情况下无需密码即可登录 serv2,则必须删除存储在 serv2 上的默认身份/root/.ssh/authorized_keys
。它应该与您的本地~/.ssh/id_*.pub
密钥在同一行。