(一)问题:
假如我们现在有两台机器:ServerMaster和ServerSlave,现在想要让ServerMaster不用输入密码就能够访问ServerSlave。
(二)方法和原理:
我们使用ssh-keygen在ServerMaster上生成private和public密钥,将生成的public密钥拷贝到远程机器ServerSlave上后,就可以使用ssh命令无需密码登录到另外一台机器ServerSlave上。
在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法【默认是DSA算法】,该工具做linux系统的远程管理是非常安全的。
(三)实验步骤:
1.登录ServerMaster
2.使用ssh-keygen -t dsa
命令,将会生成公钥和私钥文件id_dsa和id_dsa.pub【如果一直回车下去,最后这两个文件应该在/home/$USER/.ssh下面】
3.将 .pub
文件复制到ServerSlave机器的 .ssh 目录下,并保存为authorized_keys
可以使用:
ssh-cop-id
命令会将指定的公钥文件复制到远程计算机,eg.
[iotspark@iotsparkmaster ~]$ cd .ssh
[iotspark@iotsparkmaster .ssh]$ ll
total 16
-rw-r--r--. 1 iotspark iotspark 601 Mar 23 04:37 authorized_keys
-rw-------. 1 iotspark iotspark 668 Mar 23 04:37 id_dsa
-rw-------. 1 iotspark iotspark 601 Mar 23 04:37 id_dsa.pub
-rw-r--r--. 1 iotspark iotspark 1179 Apr 3 04:56 known_hosts
[iotspark@iotsparkmaster .ssh]$ cd ..
[iotspark@iotsparkmaster ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub iotspark@172.16.22.52
/usr/bin/ssh-copy-id: ERROR: No identities found
[iotspark@iotsparkmaster ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub iotspark@172.16.22.52
The authenticity of host '172.16.22.52 (172.16.22.52)' can't be established.
RSA key fingerprint is 81:48:42:50:3b:63:f9:96:89:f3:8c:b3:82:9c:60:3b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.22.52' (RSA) to the list of known hosts.
iotspark@172.16.22.52's password:
Now try logging into the machine, with "ssh 'iotspark@172.16.22.52'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[iotspark@iotsparkmaster ~]$ ssh iotspark@172.16.22.52
Last login: Tue Apr 3 00:36:41 2018 from 10.45.20.14
iotspark@iotsparknode2[/usr/iotspark]$
4.大功告成,从ServerMaster机器登录ServerSlave机器的目标账户,不再需要密码了
5.设置文件和目录权限【这一步可以省略,但是为了安全起见,加上也是有必要的~】
设置authorized_keys
权限
chmod 644 authorized_keys
设置.ssh目录权限
chmod 700 -R .ssh
6.要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。
报错:
The authenticity of host '172.16.22.52 (172.16.22.52)' can't be established.
- 如果要实现相互的免密码登录,只需要在对应的主机继续执行步骤2,3即可;
注意:
如果我们添加公钥后,还是无法访问,也可能是ServerMaster主机上面的一个文件known_hosts中已经存在ServerSlave的ip信息,删除重新访问即可。
另外,如果以上方法尝试过后还是不行,可能是因为登录失败次数过多被锁定,这个时候我们就需要去看看我们的系统日志了/var/log/messages,将之前的锁定信息日志删除就可以了。
然后,权限部分以及生成DSA文件具体可以参考另一篇博客:linux实现ssh localhost免密码登录
网友评论