[土木匠] linux服务器ssh免密钥通信
2018-01-30 本文已影响13人
后端老鸟
【转载请注明出处】:土木匠 https://www.jianshu.com/p/5fc0dc44df7f
1、ssh免密钥通信原理
SSH是一种网络协议,用于计算机之间的加密登录。通过ssh登录远程服务器时,使用密码认证,分别输入用户名和密码,两者满足一定规则就可以登录。
但是密码认证有以下的缺点:
- 用户无法设置空密码(即使系统允许空密码,也会十分危险)
- 密码容易被人偷窥或猜到
- 服务器上的一个帐户若要给多人使用,则必须让所有使用者都知道密码,导致密码容易泄露,而且修改密码时必须通知所有人
需要注意的是SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。
SSH之所以能够保证安全,原因在于它采用了公钥认证。所谓的公钥认证,实际上是使用一对加密字符串,一个称为公钥(public key),任何人都可以看到其内容;另一个称为密钥(private key),只有拥有者才能看到。
公钥登录流程:
关于ssh的基础知识可以参考https://www.jianshu.com/p/33461b619d53和http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html。
这两篇文章介绍的非常清楚。
2、ssh实践
我这里有三台机器:
test1、test2和test3,它们同属一个局域网,彼此之间是可以ping通的。
- 分别登录三台机器生成公钥和私钥
拿其中一台举例:
ssh-keygen -t rsa (执行之后一直回车)
image.png
会在$HOME/.ssh/目录下生成以下文件:
image.png
其中,id_rsa.pub是公钥,id_rsa是私钥。然后将公钥拷贝到authorized_keys中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
- 将自己的公钥追加到其他机器的authorized_keys文件中
我是先将test2和test3的公钥依次添加到test1,然后再从test1分发到test2和test3,这样几台机器都持有另外两台机器的公钥,可以互相免密钥登录。
先添加test2的公钥到test1,登录到test2,执行
scp /root/.ssh/authorized_keys root@test1/root/
然后输入test1密码传输文件,完成之后登录到test1,执行
cat /root/authorized_keys >> /root/.ssh/authorized_keys
这样就将test2的公钥添加到了test1,然后登录到test2验证
ssh test1
输入yes确认连接之后不用再输入密码,登录test3进行同样的操作,将test3的公钥也添加到test1中。之后,test1中已经有了这三台的公钥,然后将test1的authorized_keys分发到test2和test3,这样每台机器都有这三台机器的全部公钥。
scp /root/.ssh/authorized_keys root@test2/root/.ssh/ (输入密码继续)
scp /root/.ssh/authorized_keys root@test3/root/.ssh/ (输入密码继续)
至此,这三台机器已经可以免密钥登录了。
【转载请注明出处】:土木匠 https://www.jianshu.com/p/5fc0dc44df7f