这是我研究的一个 DigitalOcean 登录问题在 DigitalOcean 官方网站支持网站上看到这个问题后我最初申请时遭到了拒绝:
ssh root@$IP_DO
从上面的链接,我首先将其范围缩小到:
ssh -o "IdentitiesOnly yes" -i ~/.ssh/id_rsa root@$IP_DO
当我执行上述操作时,系统要求输入密码。我打开密码管理器,果然,我已经为该密钥设置了密码。输入密码,我就可以进入了。
(如果有关系的话,我在设置我的 Digital Ocean 帐户时输入了公钥,并选择它来创建我的 droplet)。
有点ssh-add ~/.ssh/id_rsa
,输入一次密码,现在 DigitalOcean 不再要求我输入密码了。
但是,即使在我执行上述 ssh-add 之前,我始终可以 ssh 进入 LAN 上服务器上的 Virtualbox VM,没有问题。顺便说一下,这些是 bitnami VM。
在这两种情况下,DigitalO cean 和 VM 都~/.ssh/authorized_keys
显示相同的内容:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC35MyHYQPWgHgxOffs2oI4jAJCTSldYr1tMb/LMogbTXtQW35mSsWexiwYjPIcdkkOl2Zqrt43696U1oZco90ibkFrbbXrqDGZssbaqfqk7
…
看看/etc/ssh/sshd_config
DigitalOcean:
egrep 'Authentication|PAM|Pass' /etc/ssh/sshd_config | grep -v '^#
RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM yes
uname -rv
4.4.0-93-generic #116-Ubuntu SMP Fri Aug 11 21:17:51 UTC 2017
Bitnami 虚拟机
egrep 'Authentication|PAM|Pass' /etc/ssh/sshd_config | grep -v '^#'
RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
uname -rv
3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26)
现在,进一步阅读该线程,它建议运行ssh-add ~/.ssh/id_rsa
。要求输入密钥的密码。
现在,DigitalOcean 和 VM 都无需密码即可工作,但我很好奇为什么 VM 不需要密码而 DigitalOcean 需要?
答案1
好的,我已经解决了,并且我很确定我知道发生了什么。
SSL 将尝试存储在授权密钥与使用质询系统的本地密钥相比。您实际上并不知道或控制其尝试的顺序。
machine1(VM)根目录~/.ssh/authorized_keys
指向我的一个未受密码保护的密钥,例如github。它还id_rsa,但从来没有问过,因为它在id_rsa, 使用github。
machine2(Digitalocean)根目录~/.ssh/authorized_keys
没有包含对我未受保护的github身份密钥,因此最终id_rsa。 因为id_rsa的身份尚未加载到 ssh-agent 中,并且由于它受密码保护,所以我被要求输入密码。
请注意,这与我所说的授权密钥相同相矛盾。id_rsa 的条目在两个文件中都有,但 Bitnami VM 上还有其他公钥。