1. 程式人生 > >ssh 免密登入設定

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