ssh服务登录验证有两种方式:html
1.基于用户名和密码shell
2.基于密钥centos
1)客户端想ssh服务器发起请求,服务器会把本身的公钥发送给客户端,bash
2)客户端用服务器的公钥加密本身的密码,并发送给服务器服务器
3)服务器用本身的私钥解密获得客户端的密码并验证,若是密码正确则登录成功.并发
1)客户端生成一对秘钥ssh
2)客户端把本身的公钥传送给服务器ide
3)客户端发送一个链接请求,信息包括ip和用户名测试
4)服务器去authorized_keys文件中查找相应记录,若是有,就生成一个随机字符串ui
5)服务器使用客户端的公钥把随机字符串加密后发送给客户端
6)客户端使用私钥解密,再把获得的字符串发给服务器
7)服务器对比此字符串是否与本身生成的字符串一致,若是一致就容许登录
两台主机之间:
1)客户端生成一对秘钥
命令格式
ssh-keygen -t rsa [-P ''] [-f "~/.ssh/id_rsa"]
-p 口令,可为空
-f 指定秘钥存放路径
也能够全部参数省略直接执行ssh-keygen
]# ssh-keygen
执行后三次回车.会生成未加密的私钥/root/.ssh/id_rsa和公钥/root/.ssh/id_rsa.pub
2)把公钥文件传输至远程服务器对应用户的家目录,若是写错成私钥文件名,不用担忧,传过去的依然是公钥.
命令格式
ssh-copy-id [-i [identity_file]] [user@]host
]# ssh-copy-id -i .ssh/id_rsa.pub root@172.18.7.77 root@172.18.7.77's password: Now try logging into the machine, with "ssh 'root@172.18.7.77'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
3)在服务器端查看/root/.ssh/
]# cat /root/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAusWy2QOYUC5kuwG+lNO7mWqWO/lvyqhAB1jiEcpAlns//kxVkifRtfDrA0+u7Pi+/eenW/6g1ZA6iP1muyprNXa+F84QjAaIBVlJuizKzF1iVFDOULdbyVRkKxx5Z8rlmG8WPeDl/1q9yIRrjUD84am8FOHsT/tzFLbEoeKL8vd/F6V1FPqlI+DLO28LgQ/b1Q21lJRk/XB6YvmFain9qwlzB0VF4vKVAhwVRmzA6hCxS7zohIJe8Y+1pC654mKwERtaM6PBUYPr/l0iznfU5Dxsvr4d8hp9xe2tDkyi7xkS0wd0DOE7SGbgwqUKxh7iuA+qBdln2h8dtC0dqGPlaw== root@centos6.qt
说明已经传输成功
4)测试
在客户端直接执行
]# ssh 172.18.7.77 Last login: Thu Jan 4 21:45:22 2018 from 172.18.7.61
便可免密码直接登录,不输用户名默认以当前登录用户身份尝试登录.
使用Xshell或SecureCRT之类的客户端软件实现基于秘钥登录的原理与上文相同,只要经过客户端软件生成一个公钥,并复制到服务器中,将公钥内容追加到 ~/.ssh/authorized_keys中
以后新建一个以秘钥方式登录的会话,则能够免密码直接登录.