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中
之后新建一個以秘鑰方式登陸的會話,則可以免密碼直接登陸.