应用场景:有时候我们要给远在北京或者国外的开发人员服务器的权限,为了保证服务器的安全性我们不想让他们知道服务器的root登陆密码,所以我们可以给他们用秘钥加密码的登陆模式。
原理:公钥加密 私钥解密。公钥和私钥是成对生成的,所以将私钥发给别人别人也能登陆
客户端ip:192.168.0.186
服务器ip:192.168.0.167
1.密钥认证的生成
[root@vm1 .ssh]# ifconfig eth0 | awk '/inet addr/{print }'
inet addr:192.168.0.163 Bcast:192.168.0.255 Mask:255.255.255.0
[root@vm1 .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #密钥报存的位置和名称
Enter passphrase (empty for no passphrase): #空密码
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. # 私钥的位置
Your public key has been saved in /root/.ssh/id_rsa.pub. # 公钥的位置
The key fingerprint is:
8a:85:d9:37:a8:95:e2:06:0e:d3:18:91:11:60:11:68 root@vm1
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|BBo |
|+E |
|o |
| + + o |
|+ o + * S |
| + o * o . |
| . = . |
| . |
| |
+-----------------+
公钥已经生成
现在把公钥上传到另一台服务器上去
[root@vm1 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.0.167:/root/.ssh/
或者使用:
[root@vm2 .ssh]# scp id_rsa.pub root@192.168.0.167:/root/.ssh/
登陆到服务器上:
服务器把客户端公钥重命名
[root@localhost .ssh]# mv id_rsa.pub authorized_keys
authorized_keys要644
修改ssh配置文件,设置公钥认证登录
vi /etc/ssh/sshd_config
将下边2行的注释去掉,重启ssh服务
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
/etc/init.d/sshd restart
配置完毕,现在开始登录一下
[root@vm2 .ssh]# ssh 192.168.0.167
Enter passphrase for key '/root/.ssh/id_rsa':
Last login: Wed Sep 10 05:20:47 2014 from 192.168.0.186
[root@localhost ~]#
现在输入之前设置秘钥的密码,就可以登录了。退出登录
[root@localhost ~]# exit
logout
Connection to 192.168.0.167 closed.
linux ssh 密钥认证和秘钥密码即可登录。
当开发人员用完服务器之后我们在服务器上删除公钥即可。开发人员就无法登陆了。
如果其他客户机也要登陆这台服务器我们只需要将客户端的私钥发给其他人就可以登陆了。
是不是很牛逼啊。。。。。