SSH遠端訪問及控制
阿新 • • 發佈:2021-07-02
1. SSH遠端管理
2. OpenSSH伺服器
3. 配置OpenSSH伺服器
4. sshd服務兩種驗證
5. SSH客戶端程式
6. 配置金鑰對驗證
7. TCP Wrappers訪問控制
1. SSH遠端管理
- SSH(SecureShell)是一種安全通道協議,主要用來實現字元介面的遠端登入、遠端複製等功能
- SSH協議對通訊雙方的資料傳輸進行了加密處理,其中包括使用者登入時輸入的使用者口令。因此SSH協議,具有很好的安全性
SSH客戶端:Putty、 Xshell、 CRT
SSH服務端:OpenSSH
- OpenSSH 是實現SSH協議的開源軟體專案,適用於各種UNIX、Linux 作業系統
- Centos 7系統預設已安裝openssh相關軟體包,並已將sshd服務新增為開機自啟動
- 執行“systemctl start sshd" 命令即可啟動sshd服務
- sshd服務預設使用的是TCP的22埠
- sshd服務的預設配置檔案是/etc/ssh/sshd_config
注:ssh_config是針對客戶端的配置檔案,sshd_config是針對服務端的配置檔案
2. OpenSSH伺服器
SSH (Secure Shell)協議
- 是一種安全通道協議
- 對通訊資料進行了加密處理,用於遠端管理
OpenSSH
- 服務名稱:sshd
- 服務端主程式:/usr/sbin/sshd
- 服務端配置檔案:/etc/ssh/sshd_ config
3. 配置OpenSSH伺服器
sshd_ config配置檔案的常用選項設定
1 vim /etc/ssh/ sshd_config 2 3 Port 22 4 #監聽埠為22 5 6 ListenAddress 0.0.0.0 7 #監聽地址為任意網段,也可以指定OpenSSH伺服器的具體IP 8 9 LoginGraceTime 2m 10 #登入驗證時間為2分鐘 11 12 PermitRootLogin no 13 #禁止root 使用者登入 14 15 MaxAuthTries 6 16 #最大重試次數為6 17 18 PermitEmptyPasswords no19 #禁止空密碼使用者登入 20 21 UseDNS no 22 #禁用DNS反向解析,以提高伺服器的響應速度 23 24 AllowUsers xx yy@192.168.208.30 25 #只允許xx、yy使用者登入,其中yy使用者僅能夠從IP地址為192.168.208.30的主機遠端登入(多個使用者以空格分隔) 26 27 DenyUsers cc 28 #禁止某些使用者登入,用法於AllowUsers類似(注意不要同時使用)
4. sshd服務兩種驗證
密碼驗證
- 對伺服器中本地系統使用者的登入名稱、密碼進行驗證。簡便,但可能會被暴力破解
金鑰對驗證
- 要求提供相匹配的金鑰資訊才能通過驗證。通常先在客戶端中建立一對金鑰檔案(公鑰、私鑰),然後將公鑰檔案放到伺服器中的指定位置。遠端登入時,系統將使用公鑰、私鑰進行加密/解密關聯驗證。能增強安全性,且可以免互動登入
公鑰和私鑰的關係
- 公鑰和私鑰是成對生成的,這兩個金鑰互不相同,可以互相加密和解密
- 不能根據一個金鑰來推算出另一個金鑰
- 公鑰對外公開,私鑰只有私鑰的持有人才知道
- 當密碼驗證、金鑰對驗證都啟用時,伺服器將優先使用金鑰對驗證。可根據實際情況設定驗證方式
1 vim /etc/ssh/sshd_config 2 3 PasswordAuthentication yes 4 #啟用密碼驗證 5 6 PubkeyAuthentication yes 7 #啟用金鑰對驗證 8 9 Authori zedKeysFile .ssh/ authorized_keys 10 #指定公鑰庫檔案
5. SSH客戶端程式
ssh遠端登入
ssh [選項] [email protected]
- 當用戶第一次登入SSH伺服器時,必須接受伺服器發來的ECDSA金鑰(根據提示輸入"yes")後才能繼續驗證
- 接收的金鑰資訊將儲存到~/.ssh/known_hosts檔案中。密碼驗證成功以後,即可登入目標伺服器的命令列環境中
1 -p:指定非預設的埠號,預設時預設使用22埠 2 3 ssh -p 10010 xx@192.168.208.30
scp遠端複製
1 下行復制 2 scp [email protected]:/etc/passwd /root/passwd10. txt 3 #將遠端主機中的/etc/passwd檔案複製到本機 4 5 上行復制 6 scp -r /etc/ssh/[email protected]:/opt 7 #將本機的/etc/ssh目錄複製到遠端主機
sftp安全FTP
由於使用了加密/解密技術,所以傳輸效率比普通的FTP要低,但安全性更高
操作語法sftp與ftp幾乎一樣
1 sftp xx@192.168.208.30 2 Connecting to 192.168.208.30... 3 4 #輸入密碼 5 6 sftp> ls 7 8 sftp> get檔名 9 #下載檔案到ftp目錄 10 11 sftp> put檔名 12 #_上傳檔案到ftp目錄 13 14 sftp> quit
6. 配置金鑰對驗證
客戶端建立金鑰對
通過ssh-keygeni工具為當前使用者建立金鑰對檔案。可用的加密演算法為RSA、ECDSA或DSA等 ( ssh- keygen命令的“-t”選項用於指定演算法型別)
1 useradd xx 2 echo "1234556"| passwd --stdin xx 3 Su - admin 4 5 ssh-keygen -t rsa 6 7 Generating public/private ecdsa key pair 8 9 Enter file in which to save the key (/home/admin/.ssh/id_rsa) : 10 #指定私鑰位置,直接回車使用預設位置 11 12 Created directory '/home/ admin/.ssh' 13 #生成的私鑰、公鑰檔案預設存放在宿主目錄中的隱藏目錄.ssh/下 14 15 Enter passphrase (empty for no passphrase) : 16 #設定私鑰的密碼 17 18 Enter same passphrase again: 19 #確認輸入 20 21 1s -1 ~/.ssh/id_ ecdsa* 22 #id_ ecdsa是私鑰檔案,許可權預設為600; id_ ecdsa.pub是公鑰檔案,用來提供給SSH伺服器
將公鑰檔案上傳至伺服器(兩種方法)
方法一
1 scp ~/.ssh/ id_ecdsa.pub [email protected]:/opt 2 3 在伺服器中匯入公鑰文字 4 5 mkdir .ssh 6 7 cat /opt/id_ecdsa.pub >> ~/.ssh/authorized_keys 8 9 cat .ssh/authorized_keys
方法二
1 cd ~/.ssh/ 2 3 ssh-copy-id -i id_ecdsa.pub [email protected] 4 #此方法可直接在伺服器的root使用者.ssh/目錄中匯入公鑰文字
客戶端使用金鑰對驗證
1 ssh [email protected] 2 3 Enter passphrase for key '/home/admin/.ssh/id_ecdsa': 4 #輸入私鑰的密碼
免互動登入
1 ssh-agent bash 2 ssh-add 3 Enter passphrase for /root/.ssh/id_ecdsa: 4 #輸入私鑰的密碼 5 6 ssh [email protected]
7. TCP Wrappers訪問控制
TCP Wrappers (TCP封套 )
- 將TCP服務程式“包裹”起來,代為監聽Tcp服務程式的埠,增加了一個安全檢測過程,外來的連線請求必須先通過這層安全檢測,獲得許可後才能訪問真正的服務程序
- 大多數Linux 發行版,TCP Wrappers 是預設提供的功能(rpm -q tcp_wrappers)
TCP Wrappers 保護機制的兩種實現方式
- 直接使用tcpd程式對其他服務程式進行保護,需要執行tcpd程式
- 由其他網路服務程式呼叫libwrap.so. *連結庫,不需要執行tcpd 程式。此方式的應用更加廣泛,也更有效率
使用ldd命令可以檢視程式的libwrap.so. *連結庫
1 ldd $ (which ssh)
TCP Wrappers的訪問策略
- TCPWrappers機制的保護物件為各種網路服務程式,針對訪問服務的客戶端地址進行訪問控制
- 對應的兩個策略檔案為/etc/hosts.allow和/etc/hosts .deny,分別用來設定允許和拒絕的策略
格式:
<服務程式列表>:<客戶端地址列表>
服務程式列表
- ALL:代表所有的服務
- 單個服務程式:如“vsftpd"
- 多個服務程式組成的列表:如“vsftpd, sshd”
客戶端地址列表
- ALL:代表任何客戶端地址
- LOCAL:代表本機地址
多個地址以逗號分隔
- 允許使用萬用字元“*" 和“?" ,前者代表任意長度字元,後者僅代表一個字元
- 網段地址:如“192.168.80.*”或者192.168.208.0/255.255.255.0
- 區域地址:如". benet.com"匹配benet.com 域中的所有主機
TCPWrappers機制的基本原則
- 首先檢查/etc/hosts.allow檔案, 如果找到相匹配的策略,則允許訪問
- 否則繼續檢查/etc/hosts.deny檔案,如果找到相匹配的策略,則拒絕訪問
- 如果檢查上述兩個檔案都找不到相匹配的策略,則允許訪問
“允許所有,拒絕個別”
只需在/etc/hosts.deny檔案中新增相應的拒絕策略
“允許個別,拒絕所有”
除了在/etc/hosts.allow中新增允許策略之外,還需要在/etc/hosts.deny檔案中設定"ALL:ALL"的拒絕策略
1 只希望從IP地址為192.168.208.30的主機或者位於192.168.80.0/24網段的主機訪問sshd服務,其他地址被拒絕 2 vim /etc/hosts.allow 3 sshd:192.168.208.30,192.168.80.* 4 5 vim /etc/hosts.deny 6 sshd: ALL