一、SSH遠程管理
1、定義
SSH(Secure Shell )是一種安全通道協議,主要用來實現字符界面的遠程的登錄、遠程復制等功能。
SSH協議對通信雙方的數據傳輸進行了加密處理,其中包括用戶登錄時輸入的用戶口令。因此SSH協議具有很好的安全性。
2
、客戶端與服務端
客戶端:Putty、Xshell、CRT
服務端:OpenSSH
- OpenSSH 是實現 SSH 協議的開源軟件項目,適用於各種 UNIX、Linux 操作系統。
- CentOS 7系統默認已安裝openssh相關軟件包,並已將 sshd 服務添加為開機自啟動。
3、SSH服務的開啟、端口號和配置文件
SSH服務的開啟
- 執行 “systemctl start sshd” 命令即可啟動 sshd 服務
SSH服務的端口號
- sshd 服務使用的默認端口號為 22
SSH服務的配置文件
- sshd_config 是針對服務端的配置文件
- ssh_config 是針對客戶端的配置文件
二、配置 OpenSSH 服務端
1、配置文件常用設置選項




2、AllowUsers和DenyUsers
AllowUsers和DenyUsers不能同時使用。會沖突



三、使用SSH客戶端程序
1、SSH遠程登錄
ssh [選項] 用戶名@192.168.185.10

當用戶第一次登錄SSH服務器時,必須接受服務器發來的ECDSA秘鑰(根據提示輸入"yes")后才能繼續驗證。接收的秘鑰信息將保存到 ~/.ssh/known_hosts 文件中,密碼驗證成功后,即可登錄目標服務器的命令環境中了。
選項 說明
-1 強制使用ssh協議版本1
-2 強制使用ssh協議版本2
-4 強制使用IPv4地址
-6 強制使用IPv6地址
-A 開啟認證代理連接轉發功能
-a 關閉認證代理連接轉發功能
-b 使用本機指定的地址作為對位連接的源IP地址
-C 請求壓縮所有數據
-F 指定ssh指令的配置文件,默認的配置文件為“/etc/ssh/ssh_config”
-f 后台執行ssh指令
-g 允許遠程主機連接本機的轉發端口
-i 指定身份文件(即私鑰文件)
-l 指定連接遠程服務器的登錄用戶名
-N 不執行遠程指令
-o 指定配置選項
-p 指定遠程服務器上的端口
-q 靜默模式,所有的警告和診斷信息被禁止輸出
-X 開啟X11轉發功能
-x 關閉X11轉發功能
-y 開啟信任X11轉發功能
2、SCP遠程復制
下行復制
scp [-r] 遠程用戶名@遠程主機ip:遠程目錄或文件 本地目錄
上行復制
scp [-r] 本地目錄或文件 遠程用戶名@遠程主機ip:遠程目錄
-r : 復制目錄時,需要加上 -r 選項
scp 復制時,如果目標地址由和源文件 相同的文件名,則會直接覆蓋

3、sftp 安全 FTP
由於使用了加密/解密技術,所以傳輸效率比普通的FTP要低,但安全性更高。
sftp root@192.168.226.20
root@192.168.226.20's password:
Connected to 192.168.226.20.
sftp> ls
sftp> get 文件名 #下載文件
sftp> put 文件名 #上傳文件
sftp> exit #退出



四、sshd服務支持兩種驗證方式
1、密碼驗證
對服務器中本地系統用戶的登錄名稱、密碼進行驗證。簡便,但可能會被暴力破解
2、秘鑰對驗證
要求提供相匹配的密鑰信息才能通過驗證。通常先在客戶端中創建一對密鑰文件(公鑰、私鑰),然后將公鑰文件放到服務器中的指定位置。遠程登錄時,系統將使用公鑰、私鑰進行加密/解密關聯驗證。能增強安全性,且可以免交互登錄。
當密碼驗證、密鑰對驗證都啟用時,服務器將優先使用密鑰對驗證。可根據實際情況設置驗證方式。
vim /etc/ssh/sshd_config
PasswordAuthentication yes #啟用密碼驗證
PubkeyAuthentication yes #啟用密鑰對驗證
AuthorizedKeysFile .ssh/authorized_keys #指定公鑰庫文件
1、在客戶機創建秘鑰對
通過ssh-keygen工具為當前用戶創建密鑰對文件。可用的加密算法為RSA、ECDSA或DSA等(ssh-keygen命令的“-t”選項用於指定算法類型)。
useradd admin
echo "123456" | passwd --stdin admin
su - admin
ssh-keygen -t rsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/ljm/.ssh/id_rsa): #指定私鑰位置,直接回車使用默認位置
Created directory '/home/admin/.ssh'. #生成的私鑰、公鑰文件默認存放在宿主目錄中的隱藏目錄.ssh/下
Enter passphrase (empty for no passphrase): #設置私鑰的密碼
Enter same passphrase again: #確認輸入
ls -l .ssh/id_admin* #id_rsa是私鑰文件,權限默認為600;id_rsa.pub是公鑰文件,用來提供給 SSH 服務器


2、將公鑰文件上傳至服務器
scp ~/.ssh/id_rsa.pub root@192.168.226.20:/opt
或
#此方法可直接在服務器的/home/admin/.ssh/目錄中導入公鑰文本
cd ~/.ssh/
ssh-copy-id -i id_rsa.pub zhangsan@192.168.226.20


3、在服務器中導入公鑰文本(第二台)
mkdir .ssh
ls -A
cat /id_rsa.pub >> .ssh/authorized_keys
cat authorized_keys


4、在客戶端使用秘鑰對驗證
ssh root@192.168.226.20
@192.168.226.20's password: #輸入私鑰的密碼


5、在客戶機設置ssh代理功能,實現免交互登錄
ssh-agent bash
ssh-add
Enter passphrass for /root/.ssh/id_rsa: #輸入私鑰的密碼
root@192.168.226.20


五、TCP Wrappers 訪問控制


TCP Wrappers 將TCP服務程序“包裹”起來,代為監聽TCP服務程序的端口,增加了一個安全檢測過程,外來的連接請求必須先通過這層安全檢測,獲得許可后才能訪問真正的服務程序。
大多數 Linux 發行版,TCP Wrappers 是默認提供的功能。
rpm -p top_wrappers
查看是否己安裝

1、保護機制的兩種實現方式
直接使用 tcpd 程序對其他服務程序進行保護,需要運行 tcpd程序。
由其他網絡服務程序調用 libwrap.so.* 鏈接庫,不需要運行 tcpd 程序。此方式的應用更加廣泛,也更有效率。
1、查看程序的 libwrap.so.* 鏈接庫——ldd命令
ldd [參數] [文件]
文件需要寫上絕對路徑
我們不是很清楚文件的絕對路徑時,可以使用which命令查詢
也可以兩條命令一起使用:ldd $(which sshd)
2、TCP Wrappers 的訪問策略
TCP Wrappers 機制的保護對象為各種網絡服務程序,針對訪問服務的客戶端地址進行訪問控制。
對應的兩個策略文件為 /etc/hosts.allow 和 /etc/hosts.deny,分別用來設置允許和拒絕的策略。

3、TCP Wrappers 機制的基本原則
首先檢查/etc/hosts.allow文件,如果找到相匹配的策略,則允許訪問;
否則繼續檢查/etc/hosts.deny文件,如果找到相匹配的策略,則拒絕訪問;
如果檢查上述兩個文件都找不到相匹配的策略,則允許訪問。
允許所有,拒絕個別
只需在/etc/hosts.deny文件中添加相應的拒絕策略
允許個別,拒絕所有
除了在/etc/hosts.allow中添加允許策略之外,還需要在/etc/hosts.deny文件中設置“ALL:ALL”的拒絕策略。
4、示例
只希望從IP地址為12.0.0.1的主機或者位於192.168.80.0/24網段的主機訪問sshd服務,其他地址被拒絕。
vi /etc/hosts.allow
sshd:12.0.0.1,192.168.80.*

vi /etc/hosts.deny
sshd:ALL
