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/