SSH協議及基于SSH集群key認證實驗

本節索引:

一、SSH協議相關概念

二、實驗:實現基于key登錄認證

三、實驗:實現多臺機器間互相基于key登錄認證

四、實驗:實現100臺機器基于key登錄驗證

五、實驗:利用pssh工具實現集群操作

timg_image&quality=80&size=b9999_10000&sec=1526733552386&di=f453f1e14157f36eee87

一、SSH協議相關概念

SSH:secure shell,protocal,22/tcp,安全的遠程登錄;

利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題,用來代替早期不安全的telnet

具體的軟件實現:

OpenSSH:ssh協議的開源實現。CentOS默認安裝

dropbear:另一個開源實現

SSH協議版本:

v1: 基于CRC-32做MAC,不安全;man-in-middle

v2:雙方主機協議選擇安全的MAC方式

基于DH算法做密鑰交換,基于RSA或DSA實現身份認證

相關包:

openssh

openssh-clients

openssh-server

工具:

基于C/S結構:

Client:

????? Linux:ssh,scp,sftp,slogin

??? Windows:xshell,putty,securecrt,sshsecureshellclient

Server:sshd

 

客戶端組件:

ssh, 配置文件:/etc/ssh/ssh_config

Host PATTERN

StrictHostKeyChecking no 首次登錄不顯示檢查提示

格式:

ssh [user@]host [COMMAND]

ssh [-l user] host [COMMAND]

-p port????????????? 遠程服務器監聽的端口

-b????????????? 指定連接的源IP

-v????????????? 調試模式

-C????????????? 壓縮方式

-X????????????? 支持x11轉發,跨網絡的圖形界面顯示;例如:xclock

-Y????????????? 支持信任x11轉發

ForwardX11Trusted yes

-t?????????????? 強制偽tty分配;堡壘機可用

ssh -t remoteserver1 ssh remoteserver2

 

 

兩種方式的用戶登錄認證:

基于password:

只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到“中間人”這種方式的攻擊。

大致流程:

1.客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶

2.用戶會根據服務器發來的公鑰對密碼進行加密

3.加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功

 

 

基于key:

需要依靠密匙,也就是你必須為自己創建一對密匙,并把公用密匙放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之后,先在該服務

器上你的主目錄下尋找你的公用密匙,然后把它和你發送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密“質詢”(challenge)并把它發送給客戶端軟件??蛻舳塑浖盏健百|詢”之后就可以用你的

私人密匙解密再把它發送給服務器。

大致流程:

1.首先在客戶端生成一對密鑰

2.并將客戶端的公鑰ssh-copy-id拷貝到服務器端

3.當客戶端再次發送一個連接請求,包括ip、用戶名

4.服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,服務器就會發出“質詢”(challenge)表現為一串隨機字符,如:acdf。

5.服務端將使用客戶端拷貝過來的公鑰對“質詢”進行加密,然后發送給客戶端

6.得到服務端發來“質詢”后,客戶端會使用私鑰進行解密,然后將解密后的字符串發送給服務端

7.服務端接受到客戶端發來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄

 

兩種登錄認證的對比:

基于key的認證方式,用戶必須指定自己密鑰的口令。但是,與第一種級別相比,第二種級別不需要在網絡上傳送口令。

第二種級別不僅加密所有傳送的數據,而且“中間人”這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登錄的過程會比基于passwd認證稍長,可能需要10秒

 

相關文件:

~/.ssh/authorized_keys????????? 存放已授權基于key登錄的主機的公鑰

~/.ssh/know_hosts????????????????? 存放本機SSH連接過的主機的公鑰

 

 

操作:加快ssh服務訪問速度

/etc/ssh/sshd_config文件

GSSAPIAuthentication yes–>no? ? ? ? ? ? ?關閉api驗證

#UseDNS ?yes|no–>UseDNS no???????????? 去掉注釋,啟用DNS

重啟sshd服務

CentOS6:

service ?sshd ? restart?

CentOS7:

systemctl restart sshd

 

 

二、實驗:實現基于key登錄認證

一、在客戶端生成一對鑰匙:

ssh-keygen -t rsa

交互式輸入:

默認路徑

輸入口令

二、發送公鑰給服務器端:

ssh-copy-id?? wang@192.168.30.7

再次連接:

ssh wang@192.168.30.7??????? 不提示輸入密碼

ssh wang@192.168.30.7? ‘id’??????遠程執行命令

 

利用基于key不需輸入口令登錄的特性,我們可小批量的執行一些任務:

先把需要執行任務的服務器IP放入一個文件中:

cat ip.txt

192.168.30.7

192.168.30.12

192.168.30.17

……

編寫一個腳本顯示主機名:

vim hostname.sh

hostname

chmod +x hostname.sh

執行命令:

批量傳送腳本

for ip in `cat ip.txt`;do scp -p f1.sh $ip:/data/;done

ssh批量發送腳本

批量執行腳本顯示主機名

for ip in `cat ip.txt`;do ssh $ip “/data/f1.sh”;done

ssh批量執行腳本

可結合expect實現批量密鑰登錄方式

 

三、實驗:實現多臺機器間互相基于key登錄認證

思路:多臺機器公用一套鑰匙

一、在A機器上生成一對密鑰,并對自己執行ssh-copy-id命令

ssh-keygen

ssh-copy-id A

二、將本機.ssh目錄發送給其他所有機器

scp -rp /root/.ssh? B:/root/

scp -rp /root/.ssh? C:/root/

發送目錄

即可實現多臺機器間互相基于key登錄

 

當然,如果我們覺得私鑰不加密不安全,我們還可以給私鑰重新加密

重設私鑰口令:

ssh-keygen -p

 

私鑰加密后,每次連接都要求輸入私鑰口令,我們可采取代理托管方式省去輸入口令這一環節:

注:代理托管重啟后失效,需重新設置

啟用代理托管口令

ssh-agent bash

ssh-add

 

 

 

四、實驗:實現100臺機器基于key登錄驗證

一、準備ip列表

先把需要執行任務的服務器IP放入一個文件中:

cat ip.txt

192.168.30.x

192.168.30.xx

192.168.30.xxx

……

二、編寫將公鑰推送到其他100臺機器上的腳本

#!/bin/bash

#安裝expect包

rpm -q expect &> /dev/null || yum install expect -y

#生成一對密鑰,如需加密密鑰可在-P之后寫上密碼

ssh-keygen -P “” -f “/root/.ssh/id_rsa”

#服務器登錄密碼

password=centos

while read ipaddr;do

expect <<EOF

set timeout 10

spawn ssh-copy-id $ipaddr

expect {

“yes/no” { send “yes\n”;exp_continue }

“password” { send “$password\n” }

}

expect eof

EOF

done < ip.txt

1

三、運行腳本,將公鑰推送到其他100臺機器上

四、實現基于密鑰驗證無密碼登錄

 

五、利用pssh工具實現集群管理

注:系統默認未安裝pssh工具,需使用epel源安裝,使用pssh需先建立服務器端到用戶端的基于

key驗證才可以正常使用

pssh工具:

pssh是一個python編寫可在多臺服務器上執行命令的工具,也可實現文件復制

options:

–version 查看版本

-h????????????? 指定主機文件列表,內容格式”[user@]host[:port]”

-H???????????? 指定主機,內容格式”[user@]host[:port]”

-l?????????????? 登錄使用的用戶名

-p????????????? 并發的線程數[可選]

-o????????????? 輸出的文件目錄[可選]

-e????????????? 錯誤輸入文件[可選]

-t?????????????? TIMEOUT超過時間設置。0代表無限制[可選]

-O???????????? SSH的選項

-v????????????? 查看過程

-A????????????? 手動輸入密碼模式

-x????????????? 額外的命令行參數使用空白符號,引號,反斜線處理

-X????????????? 額外的命令行參數,單個參數模式,同-x

-i?????????????? 顯示每個服務器執行結果輸出信息,默認不顯示

-P????????????? 打印出服務器返回信息

 

未建立基于key驗證將顯示[FAILURE]失敗

已建立基于key驗證將顯示[SUCCESS]成功

pssh成功失敗

 

遠程連接某主機執行hostname,顯示主機名

pssh -H ?USER@192.168.x.x ?-i ?“hostname”?

pssh

 

批量遠程執行命令

一、將需要連接的主機寫入一個文件

cat ip.txt

192.168.30.x

192.168.30.xx

192.168.30.xxx

……

二、批量顯示文件中包含的主機名

pssh -h ?ip.txt ?-i ?“hostname”

pssh批量

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98879

(1)
wangxczwangxcz
上一篇 2018-05-19
下一篇 2018-05-19

相關推薦

  • 第一周作業筆記

    1、描述計算機的組成及其功能。
    2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別。
    3、描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述。
    4、說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述。
    5、如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的。
    6、請羅列Linux發行版的基礎目錄名稱命名法則及功用規定

    Linux筆記 2018-06-21
  • LVM詳情

    lvm 原理 用法

    Linux筆記 2018-03-29
  • yum使用

    第一部分yum基礎 yum 參數: search (搜索某個軟件名稱或是描述的重要關鍵字) list(類似于rpm -qa) info(類似于rpm -qai) provides(類似于rpm -qf) eg:搜索磁盤陳列raid相關的軟件有哪些? [root@centos7 yum]#yum search raid 找出mdadm這個軟件的功能為何? [r…

    Linux筆記 2018-04-20
  • 正則表達式

      正則表達式:REGular EXPression 字符匹配: . 匹配一個隨機字符 \[^.]:匹配除了點以外任意的字符 [] 匹配指定范圍內的任意單個字符 [^] 匹配指定范圍外的任意單個字符 [:alnum:] 字母和數字 [:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z [:blank:] 空白字符(空格和制表符) [:…

    2018-03-16
  • 創建空文件和刷新時間

    復制文件和目錄cp:    

    Linux筆記 2018-04-01
  • 內核配置和內核編譯

    內核配置 /proc目錄 內核把自己內部狀態信息及統計信息,以及可配置參數通 過proc偽文件系統加以輸出 sysctl命令 默認配置文件:/etc/sysctl.conf (1) 設置某參數 sysctl -w parameter=VALUE (2) 通過讀取配置文件讓設置的參數 生效;sysctl -p [/path/to/conf_file] (3) …

    Linux筆記 2018-05-11
欧美性久久久久