linux ssh免密碼登陸

2021-08-08 10:51:28 字數 3320 閱讀 1679

1.什麼是ssh

ssh 為 secure shell 的縮寫,由 ietf 的網路小組(network working group)所制定;ssh 為建立在應用層基礎上的安全協議。ssh 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 ssh 協議可以有效防止遠端管理過程中的資訊洩露問題。ssh最初是unix系統上的乙個程式,後來又迅速擴充套件到其他操作平台。可以簡單理解為,ssh是用於遠端連線時,提供安全性的乙個協議

2.ssh原理

ssh的連線過程如下:

(1)遠端主機收到使用者的登入請求,把自己的公鑰發給使用者。

(2)使用者使用這個公鑰,將登入密碼加密後,傳送回來。

(3)遠端主機用自己的私鑰,解密登入密碼,如果密碼正確,就同意使用者登入。

在linux時操作如下:

$ ssh user@host

the authenticity of host 'host (12.18.429.21)' can't be established.

rsa key fingerprint is

98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.

are you sure you want to

continue connecting (yes/no)?

這段話的意思是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續連線嗎?

所謂」公鑰指紋」,是指公鑰長度較長(這裡採用rsa演算法,長達1024位),很難比對,所以對其進行md5計算,將它變成乙個128位的指紋。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。

很自然的乙個問題就是,使用者怎麼知道遠端主機的公鑰指紋應該是多少?回答是沒有好辦法,遠端主機必須在自己的**上貼出公鑰指紋,以便使用者自行核對。

假定經過風險衡量以後,使用者決定接受這個遠端主機的公鑰。

are you sure you want to continue connecting (yes/no)? yes
系統會出現一句提示,表示host主機已經得到認可。

warning: permanently added 'host,12.18.429.21' (rsa) to

the list of known hosts.

然後,會要求輸入密碼。

password: (enter password)
如果密碼正確,就可以登入了。

當遠端主機的公鑰被接受以後,它就會被儲存在檔案$home/.ssh/known_hosts之中。下次再連線這台主機,系統就會認出它的公鑰已經儲存在本地了,從而跳過警告部分,直接提示輸入密碼。

每個ssh使用者都有自己的known_hosts檔案,此外系統也有乙個這樣的檔案,通常是/etc/ssh/ssh_known_hosts,儲存一些對所有使用者都可信賴的遠端主機的公鑰。

在這裡有一點需要注意,如果伺服器傳送公鑰到本地的時候,本地的known_hosts如果已經有了該伺服器的舊的公鑰(假設伺服器公鑰已經更新),這個時候本地會報「host key verification failed」錯。詳情可以看這篇部落格

為解決這個問題,我的做法是利用

echo

"" > known_hosts

清空known_hosts檔案,儲存新的公鑰。

3.中間人攻擊

這是一種黑客攻擊,情況如下:

如果攻擊者插在使用者與遠端主機之間(比如在公共的wifi區域),用偽造的公鑰,獲取使用者的登入密碼。再用這個密碼登入遠端主機,那麼ssh的安全機制就蕩然無存了。這種風險就是著名的」中間人攻擊」(man-in-the-middle attack)。

ssh協議是如何應對的呢?

利用鑰匙對實現安全性(公鑰和金鑰)

這被稱為」公鑰登入」,原理很簡單,就是使用者事先將將自己的公鑰儲存在遠端主機上。登入的時候,遠端主機會向使用者傳送一段隨機字串,使用者用自己的私鑰加密後,再發回來。遠端主機用事先儲存的公鑰進行解密,如果成功,就證明使用者是可信的,直接允許登入shell,不再要求密碼。

具體說來就是:

1. 在a上生成公鑰私鑰。

2. 將公鑰拷貝給server b,要重新命名成authorized_keys(從英文名就知道含義了)

3. server a向server b傳送乙個連線請求。

4. server b得到server a的資訊後,在authorized_key中查詢,如果有相應的使用者名稱和ip,則隨機生成乙個字串,並用server a的公鑰加密,傳送給server a。

5. server a得到server b發來的訊息後,使用私鑰進行解密,然後將解密後的字串傳送給server b。server b進行和生成的對比,如果一致,則允許免登入。

總之:a要免密碼登入到b,b首先要擁有a的公鑰,然後b要做一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。

如何生成鑰匙對?

cd ~/

.ssh

ssh-keygen

-t rsa

在所有的伺服器上,以及本地都執行這一操作,然後將大家的公鑰都匯聚儲存在~/.ssh的authorized_keys檔案,這樣就事先免密碼登陸了。

具體操作如下

本地是root@db,遠端伺服器是root@remote_host

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 

scp ~/.ssh/authorized_keys root@remote_host

:~/.ssh /authorized_keys_db

cat ~/.ssh /authorized_keys_db >> ~/.ssh/authorized_keys

scp ~/.ssh/authorized_keys root@db

:~/.ssh /authorized_keys

Linux ssh免密碼登陸

1前提 在windows平台下用xshell 2.開啟xshell,然後選擇工具 tools 下的使用者金鑰管理者 u 3.生成公鑰金鑰並將檔案儲存到本地方便檢視金鑰 4.註冊到伺服器上 5.用想要免密碼登入的賬號連線伺服器 6.cd ssh 6.5沒有 ssh資料夾就 mkdir ssh 7.ss...

linux ssh免密登陸

免密登陸在集群中經常用到,當乙個機器向另一台機器scp時會出現訪問登陸密碼,如果是伺服器集群有好幾百臺不可能自己每次都要手敲這樣太麻煩了,可以自己寫個批量的指令碼配置免密登陸,本文只介紹如何設定免密登陸 準備好幾臺機器 node1,node2,node3 先在node1上輸入 ssh keygen命...

Linux SSH 使用公鑰免密碼登陸

情景 a要通過ssh連線到b。步驟 1 在a上執行 ssh keygen t rsa 2 先通過ssh連上b,然後在b上執行 ssh keygen t rsa 3 在a上執行 scp p ssh id rsa.pub home ssh authorized keys 即可。附無須ip和使用者名稱的方...