SSH遠程訪問及控制——遠程登錄服務器並傳輸數據


一、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM