1. 程式人生 > >Linux下ssh的使用!

Linux下ssh的使用!

1:檢視系統是否已經安裝了ssh套件,或則系統是否已經啟動了ssh服務

dpkg -l openssh-server  //檢視是否安裝伺服器端
dpkg -l openssh-client  //檢視是否安裝客戶端

netstat -tl             //檢視系統是否已經啟動了ssh服務
  -t:表示tcp協議
  -l:表示listen狀態

2:生成金鑰。
在當前使用者的主目錄下生成金鑰,並且放在一個.ssh的資料夾中。

1:生成金鑰
    ssh-keygen -t rsa -f ~/.ssh/id_rsa
    ********提示輸入密碼****************
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    ********進入~/.ssh
目錄*************** cd ~/.ssh/ 2:將金鑰複製進入一個名字為"authorized_keys"中。 這個名字是預設的,不能改變, 因為系統就是根據這個檔案來判斷那些機器的公鑰已經儲存在這裡了, 可以進行免鑰登入。 cat id_rsa.pub >> authorized_keys

3:分發金鑰 (這是最主要的!!)
想方設法把這個authorized_keys檔案傳送給你想要登入的機器,並且追加到目標機器對應位置的authorized_keys檔案中,這樣目標機器就有了你的公鑰,從而允許登入。
這裡用到了遠端拷貝的方式

scp authorized_keys liufukin@hadoop:/home/liufukin/

最後去目的主機把這個檔案追加到對應的.ssh目錄下的authorized_keys 中。這樣,目的主機就有了此客戶機的“公鑰”。

(還有共享檔案的NFS共享檔案的形式,使得所有機器上的authorized_keys 都一樣,都擁有叢集中所有主機的公鑰!)

4:登入到目的主機有兩種方式:
1:)基於使用者和口令的登入

ssh liufukin@hadoop2
liufukin@hadoop2's password: 
//這邊輸入的是目的主機開機登入時的密碼,這個是每一次都要輸入的。不能夠做免金鑰登入。

2:)基於公私鑰的驗證登入(可以用於免金鑰登入)

ssh hadoop2
Enter passphrase for key '/root/.ssh/id_rsa':  
//這裡輸入的是客戶機的公鑰。而不是目的主機的公鑰。

注意,這裡的密碼一定是客戶機這邊的公鑰。

5:退出登入:exit

6:總結:

一:那麼具體登入到目的主機的那個使用者呢?

假設客戶機中當前使用者為root
ssh hadoop2     //將會預設登入到目的主機hadoop2對應的root中
ssh liufukin@hadoop2 //將會登入到目的主機hadoop2對應的liufukin中(不管liufukin存不存在)


接下來就會判斷目的主機中的“對應賬戶主目錄”下有沒有
.ssh/authorized_keys檔案,同時這個檔案中有沒有“客戶機”的公鑰。 
來確定使用哪種登入方式。
---也就是接下來的第二步-----

二:ssh登入分為兩種:

1:)基於使用者和口令的登入(每次都需要輸入密碼)

## 目的主機 ##中對應的使用者下沒有
.ssh/authorized_keys或者這個檔案中沒有## 客戶機 ##的公鑰時,
就會提示輸入這個賬戶的登入密碼。
liufukin@hadoop2's password:

2:)基於公私鑰認證登入(可以實現免金鑰登入)

## 目的主機 ##中對應的使用者下存在
.ssh/authorized_keys並且這個檔案中有## 客戶機 ##的公鑰時,
就會提示輸入公鑰
Enter passphrase for key '/root/.ssh/id_rsa':  

注意:如果三次輸入公鑰都不正確,則會自動轉回口令密碼
Enter passphrase for key '/home/liufukin/.ssh/id_rsa': 
Enter passphrase for key '/home/liufukin/.ssh/id_rsa': 
Enter passphrase for key '/home/liufukin/.ssh/id_rsa': 
[email protected]'s password: 

三:ssh簡介原理

  簡單說,SSH是一種網路協議,用於計算機之間的加密登入。
  最早的時候,網際網路通訊都是明文通訊,一旦被截獲,內容就暴露無疑。
  1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登入資訊全部加密,
  成為網際網路安全的一個基本解決方案,迅速在全世界獲得推
  廣,目前已經成為Linux系統的標準配置。
  需要指出的是,SSH只是一種協議,存在多種實現,既
  有商業實現,也有開源實現。本文針對的實現是OpenSSH,
  它是自由軟體,應用非常廣泛。

實現的原理:

(1)客戶機向遠端主機發送登入請求,並且把自己的公鑰傳送給遠端主機。
(2)遠端主機收到使用者的登入請求,首先判斷對應的使用者主目錄下是否存在
    .ssh/authorized_keys並且這個檔案中有沒有有## 客戶機 ##的公鑰時,
    如果條件不成立,就會使用## 賬戶口令登入登入的方式 ##。
        同時向客戶機返回1.## 自己的公鑰 ##

    如果條件成立,則會使用## 公私鑰登入的方式 ##。
        同時向客戶機返回1.自己的公鑰;  2.客戶機公鑰加密過的## 一些驗證資訊 ##
賬戶口令登入登入的方式:(每次都需要輸入密碼,不能免金鑰登入)
      (3)使用者使用這個公鑰,將登入密碼加密後,傳送回來。
      (4)遠端主機用自己的私鑰,解密登入密碼,如果密碼正確,就同意使用者登入。

基於公私鑰登入的方式:(可以實現 免金鑰登入)
      能用到這種方式的前提是,使用者已經將自己的公鑰儲存在遠端主機上,
      這個是重點,也就是所謂的“公金鑰分發”。

      (3)使用者用自己的私鑰解密“隨機資訊”後,接著用“私鑰”加密簽名該“隨機資訊”,
      最後再用遠端主機的公鑰加密傳送給遠端主機。
      (4)遠端主機先用自己的私鑰解密,然後在用事先儲存的客戶機公鑰進行解密認證,
      得出“隨機資訊”,如果“隨機資訊”正確,就證明使用者
      是可信的,直接允許登入shell,不再要求密碼。