一、SSH遠程管理
1、SSH的概述
- SSH是一種安全通道協議,主要用來實現字符界面的遠程登錄、遠程復制等功能;
- 對通信雙方的數據傳輸進行加密處理,其中包括用戶登錄時輸入的用戶口令;
- 與早期的Telnet(遠程登錄)、rsh(遠程執行命令)、rcp(遠程文件控制)等相比,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都是ssh服務器的配置文件,二者區別在於前者是針對客戶端的配置文件,后者則是針對服務端的配置文件
二、OpenSSH服務器
1、 SSH (Secure Shell)協議
• 是一種安全通道協議
• 對通信數據進行了加密處理,用於遠程管理
2、OpenSSH
• 服務名稱: sshd
• 服務端主程序: /usr/sbin/sshd
• 服務端配置文件: /etc/ssh/sshd_ config
三、配置OpenSSH服務器
1、sshd_ config配置文件的常用選項設置
vim /etc/ssh/sshd_config #服務端配置文件 #Port 22 #監端口為22 #AddressFamily any #監聽地址為任意網卡,也可以指定Openssh服務器的具體ip #LoginGraceTime 2m #登錄驗證時間為2分鍾 #PermitRootLogin yes #禁止root用戶登錄 #MaxAuthTries 6 #最大重試次數為 6 #PermitEmptyPasswords no #禁止空密碼用戶登錄 #UseDNS no #禁用DNS反向解析,以提高服務器的響應速度 ---------------------------------------------------------------------------------- 配置允許和禁止用戶登錄:加@表示限制ip,注意允許和禁止不要同時使用!! AllowUsers zhangsan #允許zhangsan登錄(多個用戶以空格間隔) AllowUsers zhangsan@192.168.80.80 #只允許zhangsan通過192.168.80.80登錄 DenyUsers lisi #禁止lisi登錄
2、 實例操作:配置文件的常用選項
2.1 更改端口號(默認是22),指定端口登錄



2.2 設置不允許root用戶登錄


2.3 設置只允許lili、lulu用戶登錄,且其中lili用戶僅能夠從192.168.229.10的主機遠程登錄




2、.sshd服務支持登錄驗證方式有:密碼驗證和密鑰對驗證,可以設置只使用其中一種,也可以都啟用
2.1 密碼驗證:
以服務器中本地系統用戶的登錄名稱、密碼進行驗證。
這種方式使用最為簡便,但從客戶機角度來看,正在連接的服務器有可能被假冒,從服務器角度來看,當遭遇密碼暴力破解攻擊時防御能力比較弱。
2.2 密鑰對驗證:
要求提供相匹配的密鑰信息才能通過驗證,通常先在客戶機中創建一對密鑰文件(公鑰和私鑰),然后將公鑰文件放到服務器中的指定位置。
遠程登錄時,系統將使用公鑰、私鑰進行加密/解密關聯驗證,增強了遠程管理的安全性。
公鑰和私鑰是成對生成的,這兩個密鑰互不相同,可以互相加密和解密;
不能根據一個密碼來推算出另一個密鑰;
公鑰對外公開,私鑰只有私鑰的持有人才知道。
公鑰和私鑰要配對使用,如果用公鑰對數據進行加密,只有用相對應的私鑰才能解密;如果用私鑰對數據進行加密,那么只有對應的公鑰才能解密。
當密碼驗證、密鑰對驗證都啟用時,服務器將優先使用密鑰對驗證。
對於安全性要求較高的服務器,建議將密碼驗證方式禁用,只允許啟用密鑰對驗證方式;若沒有特殊要求,則兩種方式都可以。
可根據實際情況設置驗證方式:
vim /etc/ssh/sshd_config PasswordAuthentication yes #啟用密碼驗證 PubkeyAuthentication yes #啟用密鑰對驗證 AuthorizedKeysFile .ssh/ authorized_keys #指定公鑰庫文件.
四、使用SSH客戶端程序
1、ssh 遠程登錄
ssh [選項] lili@192.168.229.10
當用戶第一次登錄SSH服務器時,必須接受服務器發來的ECDSA密鑰(根據提示輸入"yes")后才能繼續驗證。
接收的密鑰信息將保存到~/.ssh/known_hosts文件中。密碼驗證成功以后,即可登錄目標服務器的命令行環境中了
ssh [選項] zhangsan@192.168.229.10 #指定登錄用戶、目標主機地址作為參數
ssh -p 20 zhangsan@192.168.229.10 #-p為指定端口
2、 scp遠程復制
復制多個文件時,中間用空格間隔
如果對方有相同的文件名,則會覆蓋原文件
2.1 下行復制
scp root@192.168.229.20:/etc/passwd /root/passwd10. txt #將遠程主機中的/etc/passwd文件復制到本機
2.2 上行復制
scp -r /etc/ssh/root@192.168.229.30:/opt #復制目錄時要加-r #將本機的/etc/ssh目錄復制到遠程主機
3、sftp 安全FTP
由於使用了加密/解密技術,所以傳輸效率比普通的FTP要低,但安全性更高。操作語法sftp與ftp幾乎一樣
sftp root@192.168.229.30 Connecting to 192.168.229.30... tsengyia@172.16.16.22's password: #輸入密碼 sftp> ls sftp> get文件名 #下載文件到ftp目錄 sftp> put文件名. #_上傳文件到ftp目錄 sftp> quit #退出.
4、實例操作
4.1 scp遠程復制
4.1.1 下行復制


4.1.2 上行復制


4.2 sftp


五、配置密鑰對驗證
1.在客戶端創建密鑰對
通過ssh-keygen工具為當前用戶創建密鑰對文件。可用的加密算法為RSA、ECDSA或DSA等 ( ssh- keygen命令的“-t”選項用於指定算法類型
首先創建賬戶:admin useradd admin #創建新用戶 echo "123456" | passwd --stdin admin #設置密碼 su admin #切換到admin用戶 ssh-keygen -t ecdsa #使用ssh-keygen進行加密 Generating public/private ecdsa key pair. Enter file in which to save the key (/home/admin/.ssh/id_ecdsa): #指定私鑰位置,回車選擇默認 Created directory '/home/admin/.ssh'. #告訴我們生成的密鑰對存放在目錄中的隱藏目錄.ssh、下 Enter passphrase (empty for no passphrase): #設置私鑰的密碼 Enter same passphrase again: #再次確認 ls -l ~/.ssh/id_ecdsa* #可以查看到生成的密鑰對文件 /home/admin/.ssh/id_ecdsa #這是私鑰文件,權限默認為600 /home/admin/.ssh/id_ecdsa.pub #這是公鑰文件,用來提供給SSH服務器
2.將公鑰文件.上傳至服務器
scp ~/.ssh/id_ecdsa.pub root@192.168.80.80:/opt #將自己的公鑰文件上傳到服務器的opt目錄下 或 cd ~/.ssh #切換到密鑰對所在目錄,此方法在服務端創建好zhangsan用戶,使用此方法直接跳過第三步 ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.229.10 #這個方法可以直接在服務的/home/zhangsan/,ssh/目錄中導入公鑰文本
3.在服務器中導入公鑰文本
useradd zhangsan #添加新用戶zhangsan echo "123456" | passwd -- stdin zhangsan #設置密碼 mkdir /home/zhangsan/.ssh/ #創建zhangsan的.ssh目錄 cat /opt/id_ecdsa.pub >> /home/zhangsan/.ssh/authorized_keys #將從客戶端接受的公鑰導入到zhangsan的公鑰庫中 cat /home/zhangsan/.ssh/authorized_keys #使用cat命令進行查看確定
4.在客戶端使用密鑰對驗證、在客戶機設置ssh代理功能,實現免交互登錄
ssh zhangsan@192.168.229.20 #使用密鑰進行遠程連接驗證 Enter passphrase for key '/home/admin/.ssh/id_ecdsa': #輸入私鑰的密碼進行驗證 exit #退出服務器端 ssh-agent bash #對客戶機設置ssh代理功能,實現面交互登錄 ssh-add Enter passphrase for /home/admin/.ssh/id_ecdsa: #輸入私鑰進行確定 ssh zhangsan@192.168.80.80 #再次遠程連接服務器的時候無需輸入密碼
6、實例操作:配置密鑰對驗證
6.1 方法一:將公鑰上傳至服務器,並在服務器導入公鑰文本
6.1.1.在客戶端創建密鑰對:


6.1.2.將公鑰文件上傳至服務器
6.1.3.在服務器中導入公鑰文本
6.1.4.在客戶端使用密鑰對驗證

6.2 方法二:將公鑰直接導入到服務器中
6.2.1 在客戶端創建密鑰對:

6.2.2 將公鑰直接導入到服務器中

6.2.3.在客戶端使用密鑰對驗證


6.2.4.在客戶機設置ssh代理功能,實現免交互登錄

六、TCP Wrappers訪問控制
1、TCP Wrappers (TCP封套 )
• 將TCP服務程序“包裹”起來,代為監聽TCp服務程序的端口,增加了一個安全檢測過程,外來的連接請求必須先通過這層安全檢測,獲得許可后才能訪問真正的服務程序
• 大多數Linux 發行版,TCP Wrappers 是默認提供的功能。rpm -q tcp_wrappers
2、TCP Wrappers 保護機制
兩種實現方式:
- 直接使用tepd程序對其他服務程序進行保護,需要運行tcpd程序
- 由其他網絡服務程序調用libwrap.so. *鏈接庫,不需要運行tcpd 程序。此方式的應用更加廣泛,也更有效率
使用ldd命令可以查看程序的libwrap.so. *鏈接庫
ldd $ (which ssh)

3、TCP Wrappers的訪問策略:
• TCPWrappers機制的保護對象為各種網絡服務程序,針對訪問服務的客戶端地址進行訪問控制
• 對應的兩個策略文件為/etc/hosts.allow和/etc/hosts .deny,分別用來設置允許和拒絕的策略
4、格式:
<服務程序列表>:<客戶端地址列表>
4.1 服務程序列表
• ALL:代表所有的服務
• 單個服務程序:如“vsftpd"
• 多個服務程序組成的列表:如“vsftpd, sshd”
4.2 客戶端地址列表
• ALL:代表任何客戶端地址
• LOCAL:代表本機地址
多個地址以逗號分隔:
允許使用通配符“*" 和“?" ,前者代表任意長度字符,后者僅代表一個字符
網段地址:如“192. 168.80.”或者192. 168.80.0/255.255.255.0
區域地址:如". benet.com"匹配benet.com 域中的所有主機
5、TCPWrappers機制的基本原則:

• 首先檢查/etc/hosts.allow文件, 如果找到相匹配的策略,則允許訪問
• 否則繼續檢查/etc/hosts.deny文件,如果找到相匹配的策略,則拒絕訪問
• 如果檢查上述兩個文件都找不到相匹配的策略,則允許訪問
“允許所有,拒絕個別”——黑名單
只需在/etc/hosts.deny文件中添加相應的拒絕策略(系統默認的就是允許所有)
“允許個別,拒絕所有”——白名單
除了在/etc/hosts .allow中添加允許策略之外,還需要在/etc/ hosts .deny文件中設置"ALL:ALL"的拒絕策略
6、實例操作
6.1 實例一:設置黑名單,不允許IP地址為192.168.229.10的主機訪問sshd服務,其他都可以訪問



6.2 實例二:設置白名單,只允許192.168.229.10的主機訪問ssh服務



七、總結
1、ssh服務器的配置文件以及所在的位置
ssh_config:客戶端的配置文件;位置:/etc/ssh/ssh_config
sshd_config:服務端的配置文件;位置:/etc/ssh/sshd_config
2、ssh服務器客戶端的功能
遠程登錄:ssh 用戶名@IP地址
復制:scp (注意主機IP后面要加冒號,復制目錄時加-r)
sftp:格式跟ftp相同(上傳文件和下載文件功能)
3、配置密鑰對驗證
流程:
在客戶端創建密鑰對(有公鑰文件和私鑰文件)
將公鑰文件上傳到服務器(有兩種方法:一種是遠程復制到服務器中,再將服務器端導入私鑰文件到公鑰本中;另一種方法是直接在客戶端導入,服務端直接使用即可)
最后在客戶端進行密鑰對驗證,還可以設置免密登錄(ssh-agent bash 、ssh add)
4、TCP wrappers
兩種訪問策略文件:/etc/hosts.allow 、/etc/hosts.deny
訪問的過程:先檢查/etc/hosts.allow文件,有則訪問,無則繼續訪問/etc/hosts.deny文件,若有則拒絕,無則允許訪問
文件設置的格式:服務程序:服務端地址 如,sshd:192.168.229.20
