目標:從服務器A免密登錄服務器B
【配置方法】
1.在服務器A生成密鑰文件,直接使用以下命令:
ssh-keygen
中間遇到輸入內容一路回車即可,完成后會在 ~/.ssh 目錄下生成兩個文件:id_rsa(私鑰文件)和 id_rsa.pub(公鑰文件,在服務器B要用到的)
2.登錄服務器B,編輯~/.ssh/authorized_keys文件,將服務器A里的~/.ssh/id_rsa.pub內容復制進去保存,並授予權限644。另外~/.ssh目錄授權700
vim ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys chmod 700 ~/.ssh
如果~/.ssh目錄不存在,請手動創建,命令為:mkdir ~/.ssh
或者直接用在服務器A上用ssh-copy-id命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@服務器B地址 其中 -i 參數是指定公鑰文件
完成以上兩步就可以實現了,如果遇到問題無法連接,請繼續往下看:
【常見問題】
1.服務器B沒打開公鑰登錄權限
解決方法:編輯/etc/ssh/sshd_config文件,注意以下幾項的值:
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
編輯完保存,重啟sshd服務(ubuntu是ssh ,centos是sshd)
(這些值其實也是默認的,默認也是開啟的,如果連不上還是需要檢查下)
2.服務器B目錄和文件權限
解決方法:檢查並設置以下權限
~/.ssh/ 700
~/.ssh/autorized_keys 644
3.服務器B開啟了selinux
解決方法:使用以下命令關閉
setenforce 0
並且編輯配置文件(永久關閉)
vim /etc/selinux/config
改變里面的值
SELINUX=disabled
然后保存
4.遇到問題:從A服務器可以免密訪問B服務器,但是B訪問A卻需要輸入密碼
原因:A服務器有id_rsa 和 id_rsa.pub id_dsa 和 id_dsa.pub 2套文件。B服務器只有 id_dsa 和 id_dsa.pub
解決: 在B服務器也生成id_rsa 和 id_rsa.pub,把B服務器的 id_rsa.pub 寫入A服務器 的authorized_keys
5.其他權限問題:
//用戶權限
chmod 700 /home/username
//.ssh文件夾權限
chmod 700 ~/.ssh/
// ~/.
ssh
/authorized_keys
文件權限
chmod 600 ~/.ssh/authorized_keys