1. 程式人生 > 其它 >SSH遠端訪問及控制

SSH遠端訪問及控制

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 no
19 #禁止空密碼使用者登入 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:指定非預設的埠號,預設時預設使用222 
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