ssh服务登陆验证有两种方式:
1.基于用户名和密码
2.基于密钥
基于用户名和密码验证过程:
1)客户端想ssh服务器发起请求,服务器会把自己的公钥发送给客户端,
2)客户端用服务器的公钥加密自己的密码,并发送给服务器
3)服务器用自己的私钥解密得到客户端的密码并验证,如果密码正确则登陆成功.
基于秘钥验证过程:
1)客户端生成一对秘钥
2)客户端把自己的公钥传送给服务器
3)客户端发送一个连接请求,信息包括ip和用户名
4)服务器去authorized_keys文件中查找相应记录,如果有,就生成一个随机字符串
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中
之后新建一个以秘钥方式登陆的会话,则可以免密码直接登陆.