天天看點

公鑰私鑰免密碼登陸(轉)

 排查

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]      

權限 600

1.免登陸的實作:

使用下例中ssky-keygen和ssh-copy-id,僅需通過3個步驟的簡單設定而無需輸入密碼就能登入遠端Linux主機。  

ssh-keygen 建立公鑰和密鑰。  

ssh-copy-id 把本地主機的公鑰複制到遠端主機的authorized_keys檔案上。

ssh-copy-id 也會給遠端主機的使用者主目錄(home)和~/.ssh, 和~/.ssh/authorized_keys設定合适的權限 。

步驟1: 用 ssh-key-gen 在本地主機上建立公鑰和密鑰

ligh@local-host$ ssh-keygen -t rsa

Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key]  

Enter passphrase (empty for no passphrase): [Press enter key]

Enter same passphrase again: [Pess enter key]

Your identification has been saved in /home/jsmith/.ssh/id_rsa.

Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.  

The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9  

ligh@local-host

步驟2: 用 ssh-copy-id 把公鑰複制到遠端主機上

ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

ligh@remote-host‘s password:

Now try logging into the machine, with ―ssh ?remote-host‘‖, and check in:  

.ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting.

[注: ssh-copy-id 把密鑰追加到遠端主機的 .ssh/authorized_key 上.]

步驟3: 直接登入遠端主機

ligh@local-host$ ssh remote-host  

Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2  

[注: SSH 不會詢問密碼.]  

ligh@remote-host$  

[注: 你現在已經登入到了遠端主機上]

2.登陸失效、公鑰失效的情況

之前沒有用ssh-copy-id複制公鑰到遠端機器上,而是用scp拷貝之後再手動加入到authorized_keys。

但是某一天這種做法忽然失效了。。。暫時也沒找到原因。但是後來後來重新生成密鑰,然後使用ssh-copy-id解決了問題。

注意重新生成密鑰之後之前設定的免登陸slave端都要重新拷貝公鑰。

總結:

1、遠端需要登入的機器是公鑰

2、本機上放的是私鑰,去開啟各種公鑰。

------------------------------

    一直以來對公鑰和私鑰都了解得不是很透徹,感覺到模棱兩可,心裡直打鼓呢。公鑰怎麼會事?私鑰怎麼會事?工作原理是怎麼的?今天在網上找了半天,通過檢視大家對這個密鑰對的了解,總算弄清楚了,咱就把我的心得寫出來給大家對密鑰對有疑問的同志們看看。

      公鑰和私鑰就是俗稱的不對稱加密方式,是從以前的對稱加密(使用使用者名與密碼)方式的提高。我用電子郵件的方式說明一下原理。

      使用公鑰與私鑰的目的就是實作安全的電子郵件,必須實作如下目的:

      1. 我發送給你的内容必須加密,在郵件的傳輸過程中不能被别人看到。

      2. 必須保證是我發送的郵件,不是别人冒充我的。

      要達到這樣的目标必須發送郵件的兩人都有公鑰和私鑰。

      公鑰,就是給大家用的,你可以通過電子郵件釋出,可以通過網站讓别人下載下傳,公鑰其實是用來加密/驗章用的。私鑰,就是自己的,必須非常小心儲存,最好加上密碼,私鑰是用來解密/簽章,首先就Key的所有權來說,私鑰隻有個人擁有。公鑰與私鑰的作用是:用公鑰加密的内容隻能用私鑰解密,用私鑰加密的内容隻能用公鑰解密。

      比如說,我要給你發送一個加密的郵件。首先,我必須擁有你的公鑰,你也必須擁有我的公鑰。

      首先,我用你的公鑰給這個郵件加密,這樣就保證這個郵件不被别人看到,而且保證這個郵件在傳送過程中沒有被修改。你收到郵件後,用你的私鑰就可以解密,就能看到内容。

      其次我用我的私鑰給這個郵件加密,發送到你手裡後,你可以用我的公鑰解密。因為私鑰隻有我手裡有,這樣就保證了這個郵件是我發送的。

      當A->B資料時,A會使用B的公鑰加密,這樣才能確定隻有B能解開,否則普羅大衆都能解開加密的訊息,就是去了資料的保密性。驗證方面則是使用簽驗章的機制,A傳資料給大家時,會以自己的私鑰做簽章,如此所有收到訊息的人都可以用A的公鑰進行驗章,便可确認訊息是由 A 發出來的了。

----------------------------------------------------------------------

通常,通過ssh登入遠端伺服器時,使用密碼認證,分别輸入使用者名和密碼,兩者滿足一定規則就可以登入。但是密碼認證有以下的缺點:

  • 使用者無法設定空密碼(即使系統允許空密碼,也會十分危險)
  • 密碼容易被人偷窺或猜到
  • 伺服器上的一個帳戶若要給多人使用,則必須讓所有使用者都知道密碼,導緻密碼容易洩露,而且修改密碼時必須通知所有人

而使用公鑰認證則可以解決上述問題。

  • 公鑰認證允許使用空密碼,省去每次登入都需要輸入密碼的麻煩
  • 多個使用者可以通過各自的密鑰登入到系統上的同一個使用者

公鑰認證的原理

所謂的公鑰認證,實際上是使用一對加密字元串,一個稱為公鑰(public key),任何人都可以看到其内容,用于加密;另一個稱為密鑰(private key),隻有擁有者才能看到,用于解密。通過公鑰加密過的密文使用密鑰可以輕松解密,但根據公鑰來猜測密鑰卻十分困難。

ssh 的公鑰認證就是使用了這一特性。伺服器和用戶端都各自擁有自己的公鑰和密鑰。為了說明友善,以下将使用這些符号。

Ac 用戶端公鑰
Bc 用戶端密鑰
As 伺服器公鑰
Bs 伺服器密鑰

在認證之前,用戶端需要通過某種方法将公鑰 Ac 登入到伺服器上。

認證過程分為兩個步驟。

  1. 會話密鑰(session key)生成
    1. 用戶端請求連接配接伺服器,伺服器将 As 發送給用戶端。
    2. 伺服器生成會話ID(session id),設為 p,發送給用戶端。
    3. 用戶端生成會話密鑰(session key),設為 q,并計算 r = p xor q。
    4. 用戶端将 r 用 As 進行加密,結果發送給伺服器。
    5. 伺服器用 Bs 進行解密,獲得 r。
    6. 伺服器進行 r xor p 的運算,獲得 q。
    7. 至此伺服器和用戶端都知道了會話密鑰q,以後的傳輸都将被 q 加密。
  2. 認證
    1. 伺服器生成随機數 x,并用 Ac 加密後生成結果 S(x),發送給用戶端
    2. 用戶端使用 Bc 解密 S(x) 得到 x
    3. 用戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的會話密鑰
    4. 伺服器計算 q + x 的 md5 值 m(q+x)
    5. 用戶端将 n(q+x) 發送給伺服器
    6. 伺服器比較 m(q+x) 和 n(q+x),兩者相同則認證成功

參考文章:javascript:void(0)

完整演變過程:javascript:void(0)

--------------------------------------------------------------------------------

2015年9月11日

直接把無錫58.241.41152的私鑰、公鑰 複制到阿裡雲的166上。

繼續閱讀