ssh免密碼登陸

1.ssh的登陸方式

1.1 密碼口令

  • 客戶端鏈接上服務器以後,服務器把本身的公鑰傳給客戶端
  • 客戶端輸入服務器密碼經過公鑰加密以後傳給服務器
  • 服務器根據本身的私鑰解密登陸密碼,若是正確那麼就讓客戶端登陸

1.2 公鑰認證

這個其實比上面的要簡單,以前上大學時老師也講過。必定要明白客戶端和服務端時經過公鑰和私鑰實現認證登陸的。必定要緊緊記住就是隻靠這兩個東西,沒有其餘的了。服務器

拿自動化部署舉例,Rundeck部署在一臺服務器上如今要對其餘的一臺或者多臺部署服務器進行項目部署,在這個場景下Rundeck對應的服務器要想去訪問其餘的部署服務器就要經過公私鑰的這種方式。ssh

Rundeck服務器至關於A端,而部署服務器至關於B端。A、B兩端要實現交互認證就要經過一組公私鑰。加密

一、客戶端即A端生成RSA公鑰和私鑰:spa

通常在用戶的根目錄新建一個.ssh/.文件夾,在文件夾中經過ssh-keygen -t rsa命令來產生一組公私鑰。3d

以下圖所示id_rsa爲私鑰,id_rsa.pub爲公鑰。code

二、客戶端將本身的公鑰存放到服務器:在生成了公私鑰以後要實現AB兩端的交互認證,這兩個文件確定不能只放到A端,固然也須要在B端(服務器端)作一下登記,咱們本身(A端)保留本身的私鑰,而後把公鑰id_rsa.pub存放到B端(通常是在用戶根目錄下的.ssh/目錄下)blog

在服務器端(B端)的.ssh/目錄下還會有authorized_keys+know_hosts,這兩個文件。進程

authorized_keys:存放遠程免密登陸的公鑰,主要經過這個文件記錄多臺機器的公鑰,上面提到的A端在生成本身的公私鑰以後,將公鑰追加到authorized_keys文件後面。ip

紅色框起來的爲新追加的A端的公鑰。rem

know_hosts : 已知的主機公鑰清單,這個做爲A端和B端都會自動生成這個文件,每次和遠端的服務器進行一次免密碼ssh鏈接以後就會在這個文件的最後追加對方主機的信息(不重複)

每進行一次就會在這個文件中自動的追加新的主機信息

經過scp將內容寫到對方的文件中

命令:scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys

也能夠分解爲一下兩步來進行:

$ scp ~/.ssh/id_rsa.pub root@<remote_ip>:pub_key //將文件拷貝至遠程服務器
$ cat ~/pub_key >>~/.ssh/authorized_keys //將內容追加到authorized_keys文件中, 不過要登陸遠程服務器來執行這條命令

網上不少都是用scp >>去追加,若是你能夠登陸到B端的話其實直接複製過去就能夠了。

 須要注意的幾點:

設置文件和目錄權限(服務器端即B端的權限):

設置authorized_keys權限
$ chmod 600 authorized_keys 

設置.ssh目錄權限
$ chmod 700 -R .ssh

到這裏咱們的配置工做就結束了!!!

進行鏈接認證:

ssh root@222.73.156.133 -p1019

 

若是嫌每次鏈接的時候很麻煩

咱們能夠利用 ssh 的用戶配置文件 config 管理 多個免密碼ssh 會話。ssh 的用戶配置文件是放在當前用戶根目錄下的 .ssh 文件夾裏(~/.ssh/config,不存在則新建立一個),其配置寫法以下:

Host    別名

    HostName        主機名

    Port            端口

    User            用戶名

    IdentityFile    密鑰文件的路徑

以下圖實例:

 

配置完後咱們就能夠經過這種方式登陸了:

 

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

兩臺服務器交互驗證的細節以下:

三、客戶端請求鏈接服務器,服務器將一個隨機字符串發送給客戶端

四、客戶端根據本身的私鑰加密這個隨機字符串以後再發送給服務器

五、服務器接受到加密後的字符串以後用公鑰解密,若是正確就讓客戶端登陸,不然拒絕。這樣就不用使用密碼了。

 

2. 在查看進程的時候不要只看有沒有,還要留意進程啓動時間和啓動的位置

 3.在進行Rundeck配置的時候要當心,不要複製粘貼的時候多了一個空格,否則會花費你很久去找問題!!!

 4.Jenkins讀取不到環境變量能夠用-ilex解決一樣也能夠,在腳本中給變量賦值。

 

相關文章
相關標籤/搜索