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中
以後新建一個以祕鑰方式登錄的會話,則能夠免密碼直接登錄.