ssh 免密登入設定
1. SSH的登入原理如圖所示:
- Client將自己的公鑰存放在Server上,追加在檔案authorized_keys中。
- Server端接收到Client的連線請求後,會在authorized_keys中匹配到Client的公鑰pubKey,並生成隨機數R,用Client的公鑰對該隨機數進行加密得到pubKey(R) ,然後將加密後資訊傳送給Client。
- Client端通過私鑰進行解密得到隨機數R,然後對隨機數R和本次會話的SessionKey利用MD5生成摘要Digest1,傳送給Server端。
- Server端會也會對R和SessionKey利用同樣摘要演算法生成Digest2。
- Server端會最後比較Digest1和Digest2是否相同,完成認證過程
2. 配置本機使用者ssh無密訪問localhost機器
(1)啟動使用者登入下,進入~/.ssh目錄,通過ssh-keygen -t rsa命令生成公鑰和私鑰,之後一直回車:
[[email protected] .ssh]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxx/.ssh/id_rsa.
Your public key has been saved in /home/xxx/.ssh/id_rsa.pub.
The key fingerprint is:
21:46:2d:36:bb:34:73:xx:xx:xx:xx:xx:xx:xx:xx:xx [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| .. ... E |
| .+ . .= + . |
| .o+..o = + |
| .=... + + o |
| . =S o . .|
| . |
| |
| |
| |
+-----------------+
執行完了之後會在當前目錄生成公鑰(id_rsa_.pub)和私鑰(id_rsa)檔案。
(2) 配置authorized_keys授權檔案,將公鑰內容追加到authorized_keys中,(若是訪問其他主機,則需要將公鑰上傳至目標機器並追加公鑰內容至目標機器authorized_keys檔案中)
若無該檔案,touch authorized_keys 生成一個。
#若無authorized_keys則生成
touch authorized_keys
#一定要設定authorized_keys檔案許可權為600
chmod 600 authorized_keys
#追加xxx使用者的公鑰至授權檔案中
cat id_rsa.pub >> authorized_keys
(3)驗證是否可以無密碼登入localhost
[[email protected] hadoop]$ ssh localhost
Last login: Fri Sep 7 01:27:12 2018 from localhost
如此未輸入密碼登入成功, 則證明ssh配置成功。
A機器要是訪問B機器,則A機器生成公鑰私鑰,將A生成的公鑰上傳至B機器, 若通過U使用者登入B機器,則追加A的公鑰到U的home/U/.ssh目錄中的authorized_keys檔案。可以通過以下命令:
cat id_rsa.pub | ssh xxx使用者名稱@主機ip或域名 'cat >> ~/.ssh/authorized_keys'
(4)Hostkey verification failed 問題
在~/.ssh目錄下一般會存在authorized_keys和know_hosts兩個檔案:
authorized_keys:記錄需要ssh無密碼登入當前機器的遠端登入請求方的公鑰;
know_hosts: 記錄當前機器成功登入過得遠端機器的key,用於本地機器驗證遠端機器是否一致;
如, A機器遠端無密碼登入B機器,則A的公鑰需要寫入B機器 ~/.ssh/authorized_keys檔案中,首次登入成功時會提示是否將B的機器key加入到A的~/.ssh/know_hosts中,則A保留了B機器的身份憑據。
A登入B出現Hostkey verification failed問題的原因是A中未保留正確的B的機器key。
可以刪除A ~/.ssh/know_hosts中原有的B的機器key。再次嘗試登入。
另外可以,嘗試修改ssh的配置,root使用者vi /etc/ssh/ssh_config, 將StrictHostKeyChecking 改成StrictHostKeyChecking no