公鑰認證,是使用一對加密字符串,一個稱為公鑰(public key), 任何人都可以看到其內容,用於加密;另一個稱為密鑰(private key),只有擁有者才能看到,用於解密。
在使用jenkins自動構建並遠程登錄服務器進行發布應用的時候,需要使用SSH公鑰認證來解決登錄服務器的問題。
其實很簡單,只需要兩個指令即可。
ssh-keygen -t rsa -P ''
ssh-copy-id -i ~/.ssh/id_rsa.pub <IP>
假設有兩台服務器,A是Jenkins構建服務器,B是應用服務器,A構建好應用之后,將包傳到B進行發布。
在A上面執行 ssh-keygen -t rsa -P '', -P后面兩個單引號表示密碼為空
之后會在~/.ssh目錄下創建兩個文件id_rsa(私鑰),id_rsa.pub(公鑰)
接下來繼續在A上執行 ssh-copy-id -i ~/.ssh/id_rsa.pub <IP>,表示將公鑰發給B,發到B服務器的~/.ssh目錄下
之后在用ssh B<ip>嘗試能否免密登錄B服務器,如果還是提示需要輸入密碼,則有以下原因
a. 非root賬戶可能不支持ssh公鑰認證(看服務器是否有限制)
b. 傳過來的公鑰文件權限不夠,可以給這個文件授權下 chmod 644 authorized_keys
c. 使用root賬戶執行ssh-copy-id -i ~/.ssh/id_rsa.pub <IP> 這個指令的時候如果需要輸入密碼則要配置sshd_config
vi /etc/ssh/sshd_config
修改完后要重啟sshd服務
service sshd restart
最后,如果可以SSH IP 免密登錄成功說明SSH公鑰認證成功。
-------------------------------------------配置插曲 開始--------------------------------------------------
簡單步驟總結(用非root用戶):
1. server1 上使用xxx用戶 ,先清理之前的ssh登錄記錄,rm –rf ~/.ssh , 運行ssh-keygen –t rsa(只需回車下一步即可,無需輸入任何密碼)。生成認證密鑰。
2. server1 上使用 ssh-copy-id xxx@server2_IP(需輸入server2密碼) , 即會將驗證密鑰copy至server2(xxx/.ssh/authorized_keys)
3. server1 上使用 ssh xxx@server2_IP 。即可 免密碼登錄。
4. 相反,即可實現相互免密碼登錄。
如果最后還是不能實現免密登錄,則可以看下 cat /var/log/secure,比如你xxx用戶的家目錄權限太高:
最后把家目錄設置成700即可,注:目錄權限調整可能影響應用程序,請謹慎操作
-------------------------------------------配置插曲 結束--------------------------------------------------
接下來進行jenkins的SSH配置,如下
1. server1 上使用haieradmin用戶 ,先清理之前的ssh登錄記錄,rm –rf ~/.ssh , 運行ssh-keygen –t rsa(只需回車下一步即可,無需輸入任何密碼)。生成認證密鑰。
2. server1 上使用 ssh-copy-id haieradmin@server2_IP(需輸入server2密碼) , 即會將驗證密鑰copy至server2(haieradmin/.ssh/authorized_keys)
3. server1 上使用 ssh haieradmin@server2_IP 。即可 免密碼登錄。
4. 相反,即可實現相互免密碼登錄。