Linux九陰真經之九陰白骨爪殘卷2(SSH)

SSHpython

ssh:安全的遠程登陸linux

 

兩種方式的用戶登陸認證shell

 

基於passwork安全

基於keybash

 

客戶端服務器

常見的客戶端工具備:Windows版的putty、securecrt、xshell;linux中有ssh、sftp、scp、slogin等併發

 

配置文件: /etc/ssh/ssh_configapp

 

ssh命令ssh

用法:ssh  username@host   CMDcurl

選項:

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

      -b          :  指定鏈接的源IP

      -v          :  調試模式

      -C         :  壓縮方式

      -X         : 支持x11轉發

      -Y         :支持信任x11轉發

      -t          :強制僞tty分配    例:  ssh  -t  remoteserver1  ssh  remoteserver2

 

ssh 客戶端

 

當客戶端第一次鏈接服務器時,服務器會發送本身的公鑰給客戶端,並保存在客戶端的~./ssh/know_hosts中。下次鏈接時不會再詢問。

 

SSH服務登陸驗證

基於密碼登陸驗證

 

由上圖咱們總結出以下步驟

(1)客戶單向服務器發起SSH請求,服務器會把本身的公鑰發送給客戶端

(2)用戶根據服務器發送的公鑰,對密碼進行加密

(3)加密後的信息回傳給服務器,服務器用本身的私鑰解密,若是密碼正確,則用戶登陸成功

 

基於祕鑰的登陸方式驗證

 

(1)首先在客戶端生成一對密鑰(ssh-keygen)

(2)並將客戶端的公鑰拷貝(ssh-copy-id) 到服務器

(3)當客戶端再一次發送鏈接請求,包括IP,用戶名

(4)服務器獲得客戶端的請求後,會到authorized——keys中查找,若是有響應的IP和用戶,   就會隨機生成一個字符串,利如:acdf

(5)服務器將使用客戶端拷貝過來的公鑰對字符串進行加密,而後發送給客戶端

(6)獲得服務器發來的消息後,客戶端會使用私鑰進行解密,而後將解密後的字符串發送給服務端

(7)服務器接受到客戶端發來的字符串後,跟以前的字符串進行對比,若是一致就容許免密碼登陸

 

 

基於key認證

基於密鑰的認證:

(1)在客戶端生成密鑰對

ssh-keygen  -t  rsa(指定加密方式)  -p''(指定空密碼)  -f  "~/.ssh/id_rsa"

(2)把公鑰文件傳輸至遠程服務器對應用戶的家目錄

ssh-copy-id  -i  ~/.ssh/id_rsa.pub  root@IPADDR

(3)測試

(4)在SecureCRT或Xshell實現基於key驗證
在SecureCRT工具—>建立公鑰—>生成Identity.pub文件
轉化爲openssh兼容格式(適合SecureCRT,Xshell不須要轉化格式),並複製到需登陸主機上相應文件authorized_keys中,注意權限必須爲600,在需登陸的ssh主機上執行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

(5)重設私鑰口令:
ssh-keygen –p     (爲私鑰加密)

(6)驗證代理(authentication agent)保密解密後的密鑰
這樣口令就只須要輸入一次
在GNOME中,代理被自動提供給root用戶
不然運行ssh-agent bash

(7)鑰匙經過命令添加給代理
ssh-add

 

例:配置基於密鑰的免密登陸

 

一、在客戶端A生成密鑰對,按3次回車鍵

[root@laobai ~/.ssh]#ssh-keygen

二、把公鑰傳給客戶端B對應的家目錄,並重命名爲 authorized_keys

 

三、在客戶端Bde ~/.ssh 的目錄下檢查是否有authorized_keys 文件

 

四、在客戶端A測試鏈接客戶端B,發現無需輸入密碼,直接登陸

 

scp命令

兩種方式:

scp [options]  [user@] host:/sourcefile    /destpath  : 將本身的文件上傳至服務器

scp [options]  、sourcefile  [user@]host:/ destpath:將服務器上的文件下載至本機

經常使用選項

   -c:壓縮數據流

   -r:遞歸複製

   -p:保持原文件的屬性信息

   -q:靜默模式

   -P PORT:指明remote  host 的監聽的端口

  

  sftp

基於ssh的交互式文件傳輸工具,用法與ftp工具類似

用法:sftp  username@host

經常使用指令:ls cd mkdir rmdir pwd get put

 

rsync命令

基於ssh和rsh服務實現高效率的遠程系統之間複製文件,與scp的區別就是 rsync 只複製有更改的文件。

rsync  -av  /etc/  192.168.1.10:/date    複製目錄和目錄下文件到另外一臺主機

rsync  -av  /etc/ 192.168.1.10 :/date    只複製目錄下的文件到另外一臺主機

特色: 比scp 更快, 只複製不一樣的文件

選項

   -n  模擬複製過程

   -v  顯示詳細過程

   -r   地櫃複製目錄樹

   -p   保留權限

   -t    保留時間戳

   -g   保留組信息

   -o   保留全部者信息

   -l   將軟連接文件自己進行復(默認)

   -L  將軟連接文件指向的文件複製

   -a   存檔,至關於-rlptgoD,但不保留ACL(-A) 和 SElinux屬性(-X)

 

passh工具

 

pass是一個python編寫能夠在多臺服務器上執行命令的工具,也能夠實現文件複製

選項

--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:打印出服務器返回信息

 

 示例

 經過pssh批量關閉seLinux
pssh -H root@192.168.1.10 -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config"

批量發送指令
pssh -H root@192.168.1.10 -i setenforce 0


pssh -H xuewb@192.168.1.10 -i hostname


當不支持ssh的key認證時,經過 -A選項,使用密碼認證批量執行指令


pssh -H xuewb@192.168.1.10 -A -i hostname


將標準錯誤和標準正確重定向都保存至/app目錄下


pssh -H 192.168.1.10 -o /app -e /app -i "hostname"

 

PSCP.PSSH命令

 pscp.pssh 功能是將本地文件批量複製到遠程主機

 -v 顯示過程當中保留常規屬性

 -a 複製過程當中保留常規屬性

 -r 遞歸櫃複製目錄 

 將本地curl.sh 複製到/app/目錄


pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/


pscp.pssh -h host.txt /root/test/curl.sh /app/


將本地多個文件批量複製到/app/目錄


pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/


將本地目錄批量複製到/app/目錄

pscp.pssh -H 192.168.1.10 -r /root/test/ /app/

相關文章
相關標籤/搜索