Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

SSH服務:

乾貨:我的虛擬機情況,改完之後

連接速度飛起

修改相應配置:

vim /etc/ssh/sshd_conf
UseDNS no
GSSAPIAuthentication no
保存退出
重啓sshd
systemctl restart sshd

ssh服務器

如果securecrt正在連接遠程主機,更改服務端口號時,該終端不會斷開,但斷開後肯定連接不上,假如該遠程主機又開啓了selinux,你又沒做設置,直接改端口後,會導致端口失效,直接怎麼都連不上了,你就找機房人員給你處理吧。公司裏若不需要selinux,首先禁用之,然後更改端口號後再上線服務器,以防止***連接暴力猜解,導致日誌文件增大。

服務器端:sshd, 配置文件: /etc/ssh/sshd_config
常用參數:

Port
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes 檢查.ssh/文件的所有者,權限等
MaxAuthTries 6
MaxSessions 10 同一個連接最大會話
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication yes 如果使用基於Key ssh登陸的話,此項改no禁用之
GatewayPorts no
ClientAliveInterval 10 單位:秒 默認多少秒出發下面的檢測,
ClientAliveCountMax 默認3 活動檢測 檢測3次,一共30秒,無活動斷開連接
UseDNS no
GSSAPIAuthentication yes 提高速度可改爲no
MaxStartups 未認證連接最大值,默認值10 可不輸入密碼連接最大數,之後30%隨機拒絕,最大連接值爲60
Banner /path/file 登陸後提示語,可起到警示作用
限制可登錄用戶的辦法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups

ssh服務的最佳實踐

建議使用非默認端口

禁止使用protocol version 1
限制可登錄用戶
設定空閒會話超時時長
利用防火牆設置ssh訪問策略
僅監聽特定的IP地址
基於口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
使用基於密鑰的認證
禁止使用空密碼
禁止root用戶直接登錄
限制ssh的訪問頻度和併發在線數
經常分析日誌

具體的軟件實現:

OpenSSH: ssh協議的開源實現,CentOS默認安裝
dropbear:另一個開源實現


SSH協議版本

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

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


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

基於password
基於key


Openssh軟件組成

相關包:

openssh
openssh-clients
openssh-server

工具:

基於C/S結構
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, putty, securecrt, sshsecureshellclient
Server: sshd

ssh客戶端
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轉發
-t:強制僞tty分配
ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3

允許實現對遠程系統經驗證地加密安全訪問
當用戶遠程連接ssh服務器時,會複製ssh服務器/etc/ssh/ssh_host*key.pub(CentOS7默認是ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的~./ssh/know_hosts中。下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接


如下圖,公鑰交換原理:
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

服務端發送自己的公鑰和會話ID給客戶端,
客戶端接收後用自己的公鑰和會話ID做異或運算,
生成一段字符串,
再用服務器的公鑰加密後,
返還給服務端,
服務端用自己的私鑰解密後,
得到這段字符串,
再與會話ID異或運算,
得到客戶端的公鑰,
雙方都持有自己的私鑰公鑰和對端的公鑰。


如下圖,ssh加密通訊
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起


基於用戶名口令登錄驗證
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起


基於密鑰的登錄方式
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

基於key認證實現
基於密鑰的認證:
(1) 在客戶端生成密鑰對,默認使用rsa算法,默認生成的密鑰對存儲在家目錄.ssh下,**此私鑰非常重要,如果被*盜取,後果不堪設想,考慮加密碼,讀取權限600

ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

(2) 把公鑰文件傳輸至遠程服務器對應用戶的家目錄,後續不指明拷貝和文件和目錄都可,自行會複製自己的公鑰到遠端服務器的.ssh目錄下,生成authorized_keys

ssh-copy-id [-i [identity_file]] [user@]host
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起
(3) 測試:基於密鑰認證後,可以基於ssh自動化批量運維一些主機,加上for循環IP地址,實現批量增刪等功能。
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

(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到對端,但是風險很大,下圖給私鑰加密碼,並通過ssh-agent服務代理 ssh-add託管私鑰的密碼

Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

(6) 在集羣環境中,需要互相主機直接聯通不需要密碼,則可以使用,一個主機ssh-keygen生成私鑰和公鑰,然後ssh-copy-id IP(自己主機的),然後將家目錄下的.ssh文件夾整個複製到集羣內的其他主機,則可互相ssh不需要密碼。
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起


SSH端口轉發

本地轉發:

-L localport:remotehost:remotehostport sshserver

選項:

-f 後臺啓用
-N 不打開遠程shell,處於等待狀態
-g 啓用網關功能

示例

ssh –L 9527:telnetsrv:23 -Nfg sshsrv
ssh -L 9527:172.16.36.107:23 -Nf 172.16.36.106
telnet 127.0.0.1 9527
當訪問本機的9527的端口時,被加密後轉發到sshsrv的ssh服務,再解密被轉發到telnetsrv:23
data <--> localhost:9527 <--> localhost:XXXXX <--> sshsrv:22 <--> sshsrv:YYYYY <--> telnetsrv:23
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

遠程轉發:

-R sshserverport:remotehost:remotehostport sshserver

示例:

ssh –R 9527:telnetsrv:23 –Nf sshsrv
ssh -R 9527:172.16.36.107:23 -Nf 172.16.36.105
telnet 127.0.0.1 9527
讓sshsrv偵聽9527端口的訪問,如有訪問,就加密後通過ssh服務轉發請求到本機ssh客戶端,再由本機解密後轉發到telnetsrv:23
Data <--> sshsrv:9527 <--> sshsrv:22 <--> localhost:<-->   localhost:YYYYY <--> telnetsrv:23
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

動態端口轉發:
當用firefox訪問internet時,本機的1080端口做爲代理服務器,firefox的訪問請求被轉發到sshserver上,由sshserver替之訪問internet

ssh -D 9527 root@sshserver -fNg

在本機firefox設置代理socket proxy:127.0.0.1:1080
curl --socks5 127.0.0.1:1080 http://www.google.com
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

如果想要讓windows系統也使用centos 7當代理轉發,需要在centos 7 etc/ssh/sshd_config 裏開啓Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起保存退出
ssh -gD 9527 localhost

scp命令
scp [options] SRC... DEST/
兩種方式:

scp [options] [user@]host:/sourcefile /destpath
scp [options] /sourcefile [user@]host:/destpath

常用選項:

-C 壓縮數據流
-r 遞歸複製
-p 保持原文件的屬性信息
-q 靜默模式
-P PORT 指明remote host的監聽的端口

rsync命令
基於ssh和rsh服務實現高效率的遠程系統之間複製文件
使用安全的shell連接做爲傳輸方式

•rsync -av /etc server1:/tmp 複製目錄和目錄下文件
•rsync -av /etc/ server1:/tmp 只複製目錄下文件

比scp更快,只複製不同的文件

常用選項:

-n 模擬複製過程
-v 顯示詳細過程
-r 遞歸複製目錄樹
-p 保留權限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 將軟鏈接文件本身進行復制(默認)
-L 將軟鏈接文件指向的文件複製
-a 存檔,相當於–rlptgoD,但不保留ACL(-A)和SELinux屬性(-X)

sftp命令
使用ls cd mkdir rmdir pwd get put等指令,可用?或help獲取幫助信息

sftp [user@]host
sftp> help


輕量級自動化運維工具

pssh:基於python編寫,可在多臺服務器上執行命令的工具,也可實現文件複製,提供了基於ssh和scp的多個並行工具
項目:http://code.google.com/p/parallel-ssh/
pdsh:Parallel remote shell program,是一個多線程遠程shell客戶端,可以並行執行多個遠程主機上的命令。 pdsh可以使用幾種不同的遠程shell服務,包括標準的“rsh”,Kerberos IV和ssh
項目: https://pdsh.googlecode.com/
mussh:Multihost SSH wrapper,是一個shell腳本,允許您使用一個命令在多個主機上通過ssh執行命令或腳本。 mussh可使用ssh-agent和RSA / DSA密鑰,以減少輸入密碼
項目:http://www.sourceforge.net/projects/mussh
說明:以上工具都包含在EPEL源中

pssh工具基於KEY驗證的情況下,很適合中小企業智能運維。

選項如下:br/>--version:查看版本
-h:**主機文件列表**,內容格式”[user@]host[:port]”
-H:主機字符串,內容格式”[user@]host[:port]”
-A:手動輸入密碼模式
-i:每個服務器內部處理信息輸出
-l:登錄使用的用戶名
-p:併發的線程數【可選】
-o:輸出的文件目錄【可選】
-e:錯誤輸出文件【可選】
-t:TIMEOUT 超時時間設置,0無限制【可選】
-O:SSH的選項
-P:打印出服務器返回信息
-v:詳細模式

基本用法詳解:
通過pssh批量關閉seLinux

pssh -H [email protected] -i ‘sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config’

批量發送指令

pssh -H [email protected] -i setenforce 0
pssh -H [email protected] -i hostname

命令調用變量時,單雙引號顯示結果不同,單引號顯示遠程主機變量內的內容,雙引號顯示當前主機變量內的內容。
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

pscp.pssh命令
pscp.pssh功能是將本地文件批量複製到遠程主機
pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote
pscp-pssh選項

-v 顯示覆制過程
-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/
Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

將本地多個文件批量複製到/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/

pslurp命令
pslurp功能是將遠程主機的文件批量複製到本地
pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)
pslurp選項

-L 指定從遠程主機下載到本機的存儲的目錄,local是下載到本地後的名稱
-r 遞歸複製目錄

Linux之SSH性能調優,防止連接等待時間過長,連接速度飛起

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章