Ubuntu SSH登录显示 Access Denied (: public key) 的解决方案,尤其适用于EC2和Nectar云
1.问题表现:
在使用putty或者x2go(尤其是后者)进行ssh无密码登录时,不断提醒输入私钥密码,而且输入一般三次之后,提示含有 public key字样的登录错误。
2.原因:
潜在的原因包括用户名错误、私钥错误、IP地址错误等,都比较好解决,唯一难处理的是由于用户公钥permission修改引起的错误。
Linux规定(尤其是云服务器提供商规定)每个用户的SSH公钥的owner不是其本人时,该公钥失效,因此如果存储在ubuntu上的用户SSH公钥的访问权限和所有者被误修改了,用户即使拿着正确的私钥,也无法实现无密码登录。
3.解决方案:
(1)在云服务器的管理界面,点击Instance(实例),在最右侧弹出式菜单中选择“Console”(控制台)
(2)进入到控制台中,可以看到Instance还在运行着(一般是图形化的登录界面),点击restart重启一下,或者利用页面上提供的" send Ctrl Alt Del"(发送Ctrl Alt Del)键让机器重启。
(3)重启过程中,继续按" send Ctrl Alt Del"(发送Ctrl Alt Del)键,并按住左侧Shift,可以进入到下图屏幕所示的界面。如果没有看到这个界面而是直接启动了,则继续重新启动,直到能够看到为止。
能够现场控制的电脑,可以略过这个环节,直接密码登录。
(4)按键盘 e 键,进入到下图的屏幕
(5)这个屏幕中的启动信息是可以编辑的。按箭头控制光标的位置,将上图中的 console=tty0,115200n8 字样删除(上图中我已经删除了),并将 ro 字样删除。保留第一个console = tty0,并在此行的末尾加上 single。最终编辑完成的效果如上图所示。
(6)按 Ctrl+x 重新引导系统。会出现下图的界面。
(7)此时已经进入到可以输入命令的截断,为ubuntu SSH用户重设权限。假设为用户名称为ubuntu,则输入
sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh
sudo chmod -R 700 /home/ubuntu/.ssh
sudo chmod -R 600 /home/ubuntu/.ssh/authorized_keys
ls一下看看.ssh文件夹下是否含有 private.key,如果含有,则还需要:
sudo chmod -R 400 /home/ubuntu/.ssh/private.key
(8)重新启动ubuntu即可。
4.X2Go SSH总是提示输入密码的问题(二)
X2Go还有一种情况下会提示输入私钥密码,而且不管如何输入都无法连接,这个的解决方案是在X2Go中不要指定私钥,而是另外启动一个Pageant(X2Go默认一起安装),在Pageant中指定私钥。
在X2Go中仅指定服务器的IP地址、端口、默认登录名、GUI类型等基本信息,并且勾选“Try auto login (via SSH Agent or default SSH key)” 。注意私钥部分(Use RSA/DSA key for ssh connection)一定要留空。我的ubuntu安装了LXDE,你需要根据自己服务器的情况选择对应的session type。