01. 遠程管理服務概念介紹
SSH 安全的遠程連接 數據信息是加密的 22 SSH服務默認可以root用戶遠程連接 系統遠程連接
TELNET 不安全的遠程連接 數據信息是明文的 23 telnet服務默認不可以讓root用戶遠程連接 網絡設備遠程連接
補充: 什么是shell
1. 每連接登錄到一個linux系統中,就是一個shell
2. 可以一個linux系統有多個會話連接,每一個會話都是一個shell
3. 系統中用戶可以實現相互轉換,每轉換一個用戶就是一個shell
shell特點說明:
1. 一般命令行臨時配置的信息,只會影響當前shell
2. 命令配置的信息如果想生效,需要切換shell eg: 修改主機名稱
02. SSH服務連接工作原理(數據加密)
私鑰: 鑰匙
公鑰: 鎖頭
第一個步驟: 客戶端 執行遠程連接命令
第二個步驟: 客戶端 服務端 建立三次握手過程
第三個步驟: 服務端 讓客戶端進行確認是否接收服務端公鑰信息
第四個步驟: 客戶端 進行公鑰確認,接收到公鑰信息
第五個步驟: 服務端 讓客戶端確認登錄用戶密碼信息
第六個步驟: 客戶端 進行密碼信息確認
第七個步驟: 客戶端 服務端 遠程連接建立成功
私鑰和公鑰作用:
01. 利用私鑰和公鑰對數據信息進行加密處理
02. 利用公鑰和私鑰進行用戶身份認證
基於密碼的方式進行遠程連接: 公鑰和私鑰只能完成數據加密過程
基於秘鑰的方式進行遠程連接: 公鑰和私鑰可以完成身份認證工作
03. SSH遠程連接的方式
a 基於口令的方式進行遠程連接 連接比較麻煩 連接不太安全
b 基於秘鑰的方式進行遠程連接 連接方便 連接比較安全
基於秘鑰方式連接過程(原理)
1. 客戶端(管理端) 執行命令創建秘鑰對
2. 客戶端(管理端) 建立遠程連接(口令),發送公鑰信息
3. 客戶端(管理端) 再次建立遠程連接
4. 服務端(被管理端) 發送公鑰質詢信息(你要是能打開我的鎖頭嗎)
5. 客戶端(管理端) 處理公鑰質詢信息(鑰匙將鎖頭打開),將質詢結果返回給服務端
6. 服務端(被管理端) 接收到質詢結果,建立好遠程連接
04. SSH實現基於秘鑰連接的部署步驟
准備工作:
准備好一台管理服務器
第一個歷程: 管理端創建秘鑰對信息
[root@m01 ~]# ssh-keygen -t dsa (默認的是rsa) 一直回車就可以
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
第二個歷程: 管理端需要將公鑰進行分發
ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31
查看對應主機公鑰,也可以直接復制到對應文件中
第三個歷程: 進行遠程連接測試
ssh 172.16.1.41 --- 不用輸入密碼信息可以直接連接
問題:
01. 如何實現批量管理多台主機
如何編寫腳本進行批量分發公鑰???
編寫腳本最簡單方式: 堆命令
#!/bin/bash
for ip in 31 7 41
do
ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.$ip
done
問題: 有交互過程
01. 需要有確認yes或no
02. 需要輸入密碼信息 OK
03. 服務端端口號變化了,如何分發公鑰
如何不用交互輸入密碼信息,進行遠程連接分發公鑰:
第一步驟: 下載安裝軟件
yum install -y sshpass
第二步驟: 執行免交互方式分發公鑰命令
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41
如何不要輸入連接yes或no的確認信息
ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 "-o StrictHostKeyChecking=no"
服務端口號發生變化,如何進行批量分發公鑰
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 -p 52113 "-o StrictHostKeyChecking=no"
分發公鑰腳本:
[root@m01 scripts]# vim fenfa_pub_key.sh
#!/bin/bash for ip in {1..100} do echo "==================== host 172.16.1.$ip pub-key start fenfa ==================== " sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.$ip "-o StrictHostKeyChecking=no" &>/dev/null echo -e "host 172.16.1.$ip fenfa success." echo "==================== host 172.16.1.$ip fenfa end ==================== " echo "" done
分發公鑰檢查腳本(批量管理腳本) --- 串型批量管理
[root@m01 scripts]# cat check_pub_key.sh
#!/bin/bash CMD=$1 for ip in {7,31,41} do echo "==================== host 172.16.1.$ip check ==================== " ssh 172.16.1.$ip $CMD echo "" done
05. SSH服務配置文件
/etc/ssh/sshd_config
Port 22 --- 修改服務端口信息
ListenAddress 0.0.0.0 --- 監聽地址 指定一塊網卡能夠接受遠程訪問請求 *****
PS: 指定監聽地址只能是本地網卡上有的地址
PermitEmptyPasswords no --- 是否允許遠程用戶使用空密碼登錄,默認不允許
PermitRootLogin yes --- 是否禁止root用戶遠程連接主機 建議改為no
GSSAPIAuthentication no --- 是否開啟GSSAPI認證功能 不用的時候關閉
UseDNS no --- 是否開啟反向DNS解析功能 建議進行關閉
06. SSH遠程服務防范入侵的案例
1. 用密鑰登錄,不用密碼登陸, 修改原來22端口
2、牤牛陣法:解決SSH安全問題
a.防火牆封閉SSH,指定源IP限制(局域網、信任公網)
b.開啟SSH只監聽本地內網IP(ListenAddress 172.16.1.61)。
3、盡量不給服務器外網IP
4、最小化(軟件安裝-授權)
5、給系統的重要文件或命令做一個指紋
/etc/passwd md5sum 11110000aaaabbbb 監控
inotify 實時監控
6、給他鎖上 chattr +i: