无需密码SSH远程终端登录

陪她去流浪 桃子 2015年04月23日 编辑 阅读次数:2838

目的

问题:每天几十次地登录到远程服务器,几十次地输入ssh命令+密码,感觉有点繁琐,于是。。。

需求:主机 C上的c 通过 ssh 远程登录为另一台主机 S上的s,但不需要输入密码。

如何做

首先,在C上生成公钥,如果已经存在则无需重新生成,默认保存在 ~/.ssh/id_rsa,可以通过下面这样判断有无:

c@C:~$ ls ~/.ssh/
id_rsa  id_rsa.pub  known_hosts

如果前面两个文件都有,那就不用再重新生成了。第三个文件多数情况是也是存在的。如果没有前面两个文件,就可以用以下方式生成:

c@C:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/c/.ssh/id_rsa): (默认路径即可)
Enter passphrase (empty for no passphrase): (无需输入密码)
Enter same passphrase again: 
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
d8:e3:**:78:ac:fd:82:10:a7:f8:95:1b:bd:d0:e8:74 c@C

OK,现在c的公钥和私钥都生成好了,然后把C的公钥加入到S的“已授权公钥”列表即可。

先登录到S并创建 .ssh 目录(一般已经存在):

c@C:~$ ssh s@S mkdir -p ~/.ssh
s@S's password: (输入密码)

现在追加公钥(注意是 .pub 结尾的那个):

c@C:~$ cat ~/.ssh/id_rsa.pub | ssh s@S 'cat >> ~/.ssh/authorized_keys'
s@S's password: (输入密码)

好了,现在登录到S应该不再需要密码了:

c@C:~$ ssh s@S

如果还嫌麻烦,可以给ssh命令取个别名并放到bashrc中,那就简洁了。

如果失败了

如果错误提示:Agent admitted failure to sign using the key,那么你可能需要注销你当前主机,或执行以下语句:

c@C:~$ ssh-add 你的私钥(缺省则为:~/.ssh/id_rsa 等)

如果还是失败了

(这是我于2015-08-08补充的)今天再遇到另外一个失败情况,操作完全正确无误,反正就是登录不上。

没有办法,只能想到查日志了,sshd的日志在:/var/log/auth.log,用 vim 打开看看究竟什么个情况:

Aug  8 11:05:21 localhost sshd[21595]: Authentication refused: bad ownership or modes for directory /root
Aug  8 11:05:21 localhost sshd[21595]: Authentication refused: bad ownership or modes for directory /root

于是乎,貌似找到了问题所在,她的意思居然是在告诉我说:``/root`` 目录不属于我或者模式设置错误,于是我好奇地 ``ls`` 了一下:

root@localhost:~# ls -ld /root
drwx------ 12 sys sys 4096 Aug  8 23:34 /root

tmd,吓了我一跳,/root 目录居然不属于 root,我真是够了!

进 ``/root`` 目录看了看,发现里面的目录和文件都是对的,不知道是什么鬼!于是执行 chown root:root /root 给改成 root 用户,于是成功!

如果还是还是失败了

我tm就不信了,请留言/评论,让大家看看什么问题这么顽固。

外部链接

标签:ssh · 远程登录