最近在搭一個集羣環境。爲了能讓Master節點和Slave節點之間可以快速通信,因此須要配置Master節點向Slave節點的免密登陸。網上的教程很是多,可是我按照正常流程走了一遍以後仍是會出現問題。因此這裏我試着將我配置時候遇到的問題以及相應的解決方案記錄下來。html
假設當前我想要在本地主機遠程登陸服務器。爲了方便起見,咱們將本地主機命名爲host,服務器命名爲server。
1.打開host上的終端,進入.ssh
目錄,生成本地的公有密鑰和私有密鑰,指令以下。若是沒有.ssh目錄,則先執行一下指令ssh localhost
面試
cd ~/.ssh
rm ./id_rsa*
#刪除以前的密鑰文件
ssh-keygen -t rsa
#一直按回車直至命令執行結束
完成後咱們會看見在.ssh文件下生成了兩個文件,分別是id_rsa.pub和id_rsa,這兩個文件分別表明着你的公鑰和你的密鑰。其中你的密鑰必定不能發給別人安全
2.將host的公鑰發送到server服務器
scp ~/.ssh/id_rsa.pub username@serverip:/directory
3.將host的公鑰添加到server的認證列表authorized_keys中。下面的操做所有在server端完成微信
cd ~/.ssh
cat directory/id_rsa.pub >> authorized_keys
若是一切正常,你在以後在host端直接ssh username@serverip
就能夠無密鑰登陸server了。ssh
經常在配完以上三步後咱們並不能無密鑰登陸,當咱們試圖本地登陸時仍是會提示咱們輸入密碼。那麼可能出錯的緣由以下spa
ssh對於文件的權限要求很高,既不能過寬也不能過窄,兩者都會形成無密鑰登陸的失敗。因此咱們能夠經過如下的指令將其設置爲正確的權限。其中.ssh文件夾應該是700,authorized_keys文件應該是600。日誌
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo vi /etc/ssh/sshd_config
找到
StrictModes yes
改爲
StrictModes no
- 全部的指令若是出現 permission denied字樣,則說明你沒有相應的權限,詳情請自行搜索如何使用戶得到管理員權限
- ssh很是講求安全性,因此遠程主機上的用戶應當和本地主機上的用戶對應,也就是說a@host沒法經過ssh登陸b@server。須要在server上先建立和本地對應的用戶a,而後再進行後序的操做
ssh -vvv username@serverip
能夠顯示出ssh登陸過程的完整操做,能夠幫助識別失敗的緣由- 在服務器端查看日誌肯定問題
sudo tail /var/log/secure
SSH免密登陸原理code
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~server