文章目錄
- SSH遠程訪問及控制
- 1、SSH是什么?
- 2、SSH的優點:
- 3、常見的ssh協議:
- 4、SSH原理:
- 5、SSH登錄:
- 5、服務端配置:
- 6、使用秘鑰對及免互動驗證登錄:
- TCP Wrappers訪問機制
- 保護機制:
- 輕量級自動化運維工具pssh
- EPEL源中提供了多個自動化運維工具
- 總結:
SSH遠程訪問及控制
1、SSH是什么?
(1)是一種安全通道協議
(2)用來實作字符界面的遠程登錄、遠程 復制等功能,
(3)SSH 協議對通信雙方的資料傳輸進行了加密處理,其中包括用戶登錄時輸入的用戶口令,SSH 為建立在應用層和傳輸層基礎上的安全協議,
(4)對資料進行壓縮,加快傳輸速度,
2、SSH的優點:
(1)資料傳輸是加密的,可以防止資訊泄露;
(2)資料傳輸是壓縮的,可以提高傳輸速度;
3、常見的ssh協議:
Linux 客戶端:ssh,scp, sftp, slogin
windows 客戶端:xshell, MobaXterm, putty, securecrt, sshsecureshellclient
OpenSSH 是實作SSH協議的開源軟體專案,適用于各種UNIX、 Linux 作業系統,
Centos 7系統默認已安裝openssh相關軟體包,并將sshd 服務添加為開機自啟動,
執行"systemctl start sshd"命令即可啟動sshd 服務;
sshd服務的默認組態檔是/etc/ssh/sshd_config;
4、SSH原理:
(1) 客戶端發起連接請求;
(2) 服務端回傳自己的公鑰,以及一個會話ID;
(3) 客戶端生成一個秘鑰對;
(4) 客戶端用自己的公鑰異或會話ID,計算出一個值Res,并用服務端的公鑰加密;
(5) 客戶端發送加密后的值到服務端,服務端用私鑰解密,得到Res;
(6) 服務端用解密后的值Res異或會話ID,計算出客戶端的公鑰(這一步服務端得到客戶端公鑰);
(7) 最后:雙方各自持有三個秘鑰,分別為自己的一對公、私鑰,以及對方的公鑰,之后的所有通訊都會被加密;

5、SSH登錄:
#登錄 方法一:
ssh [遠程主機用戶名]@[遠程服務器主機名或IP地址] -p port
當在 Linux 主機上遠程連接另一臺 Linux 主機時,如當前所登錄的用戶是 root 的話,當連接另一臺主機時也是用 root 用戶登錄時,可以直接使用 ssh IP,埠默認即可,如果埠不是默認的情況下,需要使用-p 指定埠,
例子:
[root@localhost ~]#ssh root@192.168.111.130
#默認使用22埠 root(登錄對方的用戶)加IP 地址,首次登錄會詢問,并要求輸入密碼
The authenticity of host '192.168.111.130 (192.168.111.130)' can't be established.
ECDSA key fingerprint is SHA256:cfw/ywtq68ErYAFBf1MR8s00x2d5S4usr4Aw5Syty2s.
ECDSA key fingerprint is MD5:c3:2e:81:05:f6:76:60:e0:08:d2:42:b2:1b:34:1e:d4.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.91.101's password:
Last login: Sun Oct 17 14:40:32 2021 from 192.168.111.130
[root@swl ~]#
#登錄方法二
ssh -l [遠程主機用戶名] [遠程服務器主機名或IP 地址] -p port
-l :-l 選項,指定登錄名稱,
-p:-p 選項,指定登錄埠(當服務端的埠非默認時,需要使用-p 指定埠進行登錄)
例子:
[root@ky15 ~]#ssh -l root 192.168.111.130
root@192.168.111.130's password:
Last login: Sun Oct 17 14:40:32 2021 from 192.168.111.130

這里我們思考一下登錄時怎么確認是不是我需要連接的服務器呢?
我們可以先用ssh 連接服務器自己,看自己的加密密碼,然后對比客戶端用ssh 連接服務器時的加密密碼是否一致,
5、服務端配置:
[root@ky15-1 ~]# vim /etc/ssh/sshd_config //修改組態檔
Port 22 #生產建議修改
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes #默認ubuntu不允許root遠程ssh登錄
StrictModes yes #檢查.ssh/檔案的所有者,權限等
MaxAuthTries 6 #pecifies the maximum number of authentication
# ssh -o NumberOfPasswordPrompts=8root@192.168.111.122 需要配合這個選項一起使用
attempts permitted per connection. Once the number of failures reaches half this
value, additional failures are logged. The default is 6.
MaxSessions 10 #同一個連接最大會話
PubkeyAuthentication yes #基于key驗證
PermitEmptyPasswords no #空密碼連接
PasswordAuthentication yes #基于用戶名和密碼連接
GatewayPorts no
ClientAliveInterval 10 #單位:秒
ClientAliveCountMax 3 #默認3
UseDNS yes #提高速度可改為no
GSSAPIAuthentication yes #提高速度可改為no
MaxStartups #未認證連接最大值,默認值10
Banner /path/file
#以下可以限制可登錄用戶的辦法:白名單 黑名單
AllowUsers user1 user2 user3@ip(限制主機)
6、使用秘鑰對及免互動驗證登錄:
原理:
- 用戶/密碼
- 基于秘鑰
基于秘鑰的登錄方式:
-
首先在客戶端生成一對密鑰(ssh-keygen);
-
并將客戶端的公鑰ssh-copy-id 拷貝到服務端;
-
當客戶端再次發送一個連接請求,包括ip、用戶名;
-
服務端得到客戶端的請求后,會到authorized_keys()中查找,如果有回應的IP和用戶,就會隨機生成一個字串,例如:kgc;
-
服務端將使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端;
-
得到服務端發來的訊息后,客戶端會使用私鑰進行解密,然后將解密后的字串發送給服務端;
-
服務端接受到客戶端發來的字串后,跟之前的字串進行對比,如果一致,就允許免密碼登錄;

[root@swl ~]# ssh-keygen --help //查看幫助檔案
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-N new_passphrase] [-C comment] [-f output_keyfile]
#生成密鑰我那件,注意:如果要免密登錄,這里不設定密碼,一直回車即可
[root@swl ~]# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
#cd 到.ssh 隱藏檔案,會看到公鑰和私鑰
[root@swl ~]# cd .ssh
[root@swl .ssh]# ls
id_ecdsa id_ecdsa.pub
[lisi@ky15-1 .ssh]$ ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.111.122
#將公鑰檔案匯入對方用戶的 注意路徑
#與用戶密碼無關
#IP地址無關
#只與密鑰對有關
#登錄服務器,這時不需要登錄密碼就可登錄
[root@swl .ssh]# ssh root@192.168.111.122
Last login: Sun Oct 17 17:10:36 2021 from 192.168.111.1
#服務器端查看密鑰對資訊
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls
authorized_keys known_hosts
TCP Wrappers訪問機制
保護機制:
TCP Wrappers 將 TCP 服務程式“包裹”起來,代為監聽 TCP 服務程式的埠,增加了 一個安全檢測程序,外來的連接請求必須先通過這層安全檢測,獲得許可后才能訪問真正 的服務程式,
TCP Wrappers 還可以記錄所有企圖訪問被保護服務的行為, 為管理員提供豐富的安全分析資料,
訪問控制策略的組態檔:
/etc/hosts.allow
/etc/hosts.deny
[root@swl ~]#vim /etc/hosts.allow
#配置格式 服務:地址(客戶端)
#添加
sshd:192.168.111.122
[root@swl ~]#vim /etc/hosts.deny
sshd:ALL
輕量級自動化運維工具pssh
EPEL源中提供了多個自動化運維工具
(1)pssh:基于python撰寫,可在多臺服務器上執行命令的工具,也可實作檔案復制,提供了基于ssh和scp的多個并行工具,
(2)pdsh:是一個多執行緒遠程shell客戶端,可以并行執行多個遠程主機上的命令, 可使用幾種不同的遠程shell服務,包括rsh,Kerberos IV和ssh,
(3)mussh:是一個shell腳本,允許使用命令在多個主機上通過ssh執行命令, 可使用ssh-agent和RSA/DSA密鑰,以減少輸入密碼,
pssh 命令選項如下:
-H:主機字串,內容格式”[user@]host[:port]”
-h file:主機串列檔案,內容格式”[user@]host[:port]”
-A:手動輸入密碼模式
-i:每個服務器內部處理資訊輸出
-l:登錄使用的用戶名
-p:并發的執行緒數【可選】
-o:輸出的檔案目錄【可選】
-e:錯誤輸出檔案【可選】
-t:TIMEOUT 超時時間設定,0無限制【可選】
-O:SSH的選項
-P:列印出服務器回傳資訊
-v:詳細模式
--version:查看版本
剛開始是沒有pssh軟體包的,本地源也安裝不了;

這時我們要安裝配置開發源:
安裝需要配置開發源
[root@swl yum.repos.d]# cd /etc/yum.repos.d
[root@swl yum.repos.d]# vim CentOS-Base.repo
#最后一行添加
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
https://mirrors.huaweicloud.com/epel/$releasever/x86_64
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0
[root@swl yum.repos.d]#yum clean all
#清除快取
[root@swl yum.repos.d]# yum install pssh -y

接下來,要設定免密登錄(一直回車即可)
[root@localhost yum.repos.d]# ssh-keygen
[root@localhost ~]# cd .ssh
#查看一下,有一個公鑰
[root@localhost .ssh]# ls
id_rsa id_rsa.pub
#上傳密鑰對,需要兩臺服務器
#服務器1:192.168.111.100
#服務器2:192.168.111.122
[root@swl yum.repos.d]# ssh-copy-id 192.168.111.100
[root@swl yum.repos.d]# ssh-copy-id 192.168.111.122



#批量查看/etc/passwd 檔案
[root@ky15-1 yum.repos.d]# pssh -H "192.168.111.100 192.168.111.122" -i cat /etc/passwd
#批量創建 swl.txt 檔案
[root@ky15-1 yum.repos.d]# pssh -H "192.168.111.100 192.168.111.122" -i touch /opt/swl.txt


這里批量創建 swl.txt 檔案



總結:
pssh 批量處理工具還是很有用處的,在小公司就30臺以下的服務器,這個軟體是非常方便的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321512.html
標籤:其他
上一篇:Linux系統中gitee的使用
