Linux系列教程(13)- 使用 ssh 服务管理远程主机
使用 ssh 服務管理遠程主機
配置 sshd 服務
SSH(Secure Shell)是一種能夠以安全的方式提供遠程登錄的協議,也是目前遠程管理
Linux 系統的首選方式。在此之前,一般使用 FTP 或 Telnet 來進行遠程登錄。但是因為它們
以明文的形式在網絡中傳輸賬戶密碼和數據信息,因此很不安全。
想要使用 SSH 協議來遠程管理 Linux 系統,則需要部署配置 sshd 服務程序。sshd 是基于 SSH
協議開發的一款遠程管理服務程序,不僅使用起來方便快捷,而且能夠提供兩種安全驗證的方法:
? 基于口令的驗證 — 用賬戶和密碼來驗證登錄;
? 基于密鑰的驗證 — 需要在本地生成密鑰對,然后把密鑰對中的公鑰上傳至服務器,
并與服務器中的公鑰進行比較;該方式相較來說更安全。
配置
Port 22 默認的 sshd 服務端口
ListenAddress 0.0.0.0 設定 sshd 服務器監聽的 IP 地址
Protocol 2 SSH 協議的版本號
HostKey /etc/ssh/ssh_host_key SSH 協議版本為 1 時,DES 私鑰存放的位置
HostKey /etc/ssh/ssh_host_rsa_key SSH 協議版本為 2 時,RSA 私鑰存放的位置
HostKey /etc/ssh/ssh_host_dsa_key SSH 協議版本為 2 時,DSA 私鑰存放的位置
PermitRootLogin yes 設定是否允許 root 管理員直接登錄
StrictModes yes 當遠程用戶的私鑰改變時直接拒絕連接
MaxAuthTries 6 最大密碼嘗試次數
MaxSessions 10 最大終端數
PasswordAuthentication yes 是否允許密碼驗證
PermitEmptyPasswords no 是否允許空密碼登錄(很不安全)
sshd 服務的配置信息保存在/etc/ssh/sshd_config 文件中。
# cat /etc/ssh/sshd_config密碼登錄
在 RHEL 7 系統中,已經默認安裝并啟用了 sshd 服務程序。接下來使用 ssh 命令進行遠
程連接,其格式為“ssh [參數] 主機 IP 地址”。要退出登錄則執行 exit 命令。
命令
狀態 # systemctl status sshd 重啟 # systemctl restart sshd 開機啟動 # systemctl enable sshd公鑰密鑰登錄
可以實現免輸入密碼進行登錄。
在客戶端主機中生成“密鑰對”,在.ssh目錄。
# ssh-keygen 一直回車把客戶端主機中生成的公鑰文件傳送至遠程主機。
ssh-copy-id -p port user@remotr
# ssh-copy-id 192.168.10.10 Are you sure you want to continue connecting (yes/no)? yes root@192.168.10.10's password:輸入遠程服務器密碼在客戶端嘗試登錄到服務器,此時無須輸入密碼也可成功登錄。
遠程傳輸命令
scp(secure copy)是一個基于 SSH 協議在網絡之間進行安全傳輸的命令,其格式為“scp
[參數] 本地文件 遠程帳戶@遠程 IP 地址:遠程目錄”。
由于 scp 命令是基于 SSH 協議進行文件傳送的,上節又設置好了密鑰驗證,因
此當前在傳輸文件時,并不需要賬戶和密碼。
此外,還可以使用 scp 命令把遠程主機上的文件下載到本地主機,其命令格式為“scp [參
數] 遠程用戶@遠程 IP 地址:遠程文件 本地目錄”。例如,可以把遠程主機的系統版本信息文
件下載過來,這樣就無須先登錄遠程主機,再進行文件傳送了,也就省去了很多周折。
遠程登錄客戶端
Linux 系統中是通過 ssh 服務實現的遠程登錄功能,默認 ssh 服務端口號為 22。
Window 系統上 Linux 遠程登錄客戶端有Xshell ,SecureCRT, Putty, SSH Secure Shell 等
xshell上使用公鑰登陸Linux服務器
1.設置連接
設置協議=SSH、IP、端口
2.設置用戶身份驗證
方法=public key 用戶名=root
3.生成公鑰
點擊瀏覽生成,一直下一步,輸入密碼123456
最后保存成文件如:id_rsa_2048.pub,然后填寫生成公鑰過程中輸入的密碼 ,文件內容如下
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn6gjMhvBsm5lghzmWNlQlrL0DByMtslErHbzrmp4l8qCdOgRMhJH8zI3IoBPqnFv+9Vf5+qGlMdG+DfW17HEiz8tnqvhjdjviGK0ZVBANNIjVaTst5GsMVfOdR9pBdudMQa6bffV6wV7UiJ0XLQYD3GSEjBDH+ZTt7cU/zTV5ph8n4evaK301IwGcBU90pQmoMSmkYqu+wnkS8OApyX9OEsoTe4H7l8EImVdzw5nCrnSKBgPMd1JGqo1wpBrK+3ZwdDhc/Q/TNX1TpNd/nbB2JJGdOzBdugVZyW/8hoVAaWt6uVRStq4jWoSRUagmuA1Anrs2lPyIQVEmX/GxUZ9GQ==4.上傳公鑰文件到linux服務器的~/.ssh/目錄
5.執行命令cat id_rsa_2048.pub >> authorized_keys,如果沒有authorized_keys,則自己創建一個
6.修改權限chmod 600 authorized_keys
7.打開之前設置的連接就可以使用公鑰連上服務器了
sftp 服務程序
sftp采用的是ssh加密隧道,安全性方面比ftp強,而且依賴的是系統自帶的ssh服務,不像ftp還需要額外的進行安裝,默認已經安裝,可以
# ssh -V # sftp 127.0.0.1 Connected to 127.0.0.1. sftp> ls眾所周知sftp賬號是基于ssh賬號的,所以在默認情況下訪問服務器的權限是非常大的,進行sftp用戶權限設置
你的openssh-server版本至少得失4.8p1。
1、創建sftp用戶組
groupadd sftp2、創建ftp用戶
useradd -g sftp -s /sbin/nologin -M sftpuser passwd sftpuser3、創建家目錄并指定權限
注釋:給家目錄更改屬主并授權家目錄屬主必須是root,權限可以是755或者750
mkdir -p /opt/data usermod -d /opt/data sftpuserchown root:root /opt/data chmod 755 /opt/data4、創建可寫目錄
mkdir /opt/data/file -p chown sftpuser:sftp /opt/data/file5、編輯配置文件/etc/ssh/sshd_config
注釋掉X11Forwarding yes 這句話,大概在101行 注釋掉Subsystem sftp /usr/libexec/openssh/sftp-server 這句話,大概在132行并在文件末尾添加如下語句: Subsystem sftp internal-sftp Match User sftpuser ChrootDirectory /opt/data ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no# systemctl restart sshd6、驗證
# sftp sftpuser@127.0.0.1注釋:文件只能刪除至/opt/data/file目錄下,可以上傳和刪除。默認端口22
使用 vsftpd 服務傳輸文件
文件傳輸協議
今天的互聯網是由幾千萬臺個人計算機、工作站、服務器、小型機、大型
機、巨型機等具有不同型號、不同架構的物理設備共同組成的,而且即便是個人計算機,也
可能會裝有 Windows、Linux、UNIX、Mac 等不同的操作系統。為了能夠在如此復雜多樣的
設備之間解決問題解決文件傳輸問題,文件傳輸協議(FTP)應運而生。
FTP 是一種在互聯網中進行文件傳輸的協議,基于客戶端/服務器模式,默認使用 20、21
號端口,其中端口 20(數據端口)用于進行數據傳輸,端口 21(命令端口)用于接受客戶端
發出的相關 FTP 命令與參數。
FTP 協議有下面兩種工作模式。
? 主動模式:FTP 服務器主動向客戶端發起連接請求。
? 被動模式:FTP 服務器等待客戶端發起連接請求(FTP 的默認工作模式)。
防火墻一般是用于過濾從外網進入內網的流量,因此有些時候需要將 FTP 的工作模式設置為
主動模式,才可以傳輸數據。
vsftpd(very secure ftp daemon,非常安全的 FTP 守護進程)是一款運行在 Linux 操作系
統上的 FTP 服務程序,不僅完全開源而且免費,此外,還具有很高的安全性、傳輸速度,以
及支持虛擬用戶驗證等其他 FTP 服務程序不具備的特點。
vsftpd 服務程序的主配置文件(/etc/vsftpd/vsftpd.conf)
[root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak [root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf [root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.confdirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES配置參數說明:
listen=[YES|NO] 是否以獨立運行的方式監聽服務 listen_address=IP 地址 設置要監聽的 IP 地址 listen_port=21 設置 FTP 服務的監聽端口 download_enable=[YES|NO] 是否允許下載文件 userlist_enable=[YES|NO] userlist_deny=[YES|NO] 設置用戶列表為“允許”還是“禁止”操作 max_clients=0 最大客戶端連接數,0 為不限制 max_per_ip=0 同一 IP 地址的最大連接數,0 為不限制 anonymous_enable=[YES|NO] 是否允許匿名用戶訪問 anon_upload_enable=[YES|NO] 是否允許匿名用戶上傳文件 anon_umask=022 匿名用戶上傳文件的 umask 值 anon_root=/var/ftp 匿名用戶的 FTP 根目錄 anon_mkdir_write_enable=[YES|NO] 是否允許匿名用戶創建目錄 anon_other_write_enable=[YES|NO] 是否開放匿名用戶的其他寫入權限(包括重命名、刪 除等操作權限) anon_max_rate=0 匿名用戶的最大傳輸速率(字節/秒),0 為不限制 local_enable=[YES|NO] 是否允許本地用戶登錄 FTP local_umask=022 本地用戶上傳文件的 umask 值 local_root=/var/ftp 本地用戶的 FTP 根目錄 chroot_local_user=[YES|NO] 是否將用戶權限禁錮在 FTP 目錄,以確保安全 local_max_rate=0 本地用戶最大傳輸速率(字節/秒),0 為不限制vsftpd 服務程序
vsftpd 作為更加安全的文件傳輸的服務程序,允許用戶以三種認證模式登錄到 FTP 服務
器上。
? 匿名開發模式 :是一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登錄
到 FTP 服務器。
?本地用戶模式 :是通過 Linux 系統本地的賬戶密碼信息進行認證的模式,相較于匿名
開放模式更安全,而且配置起來也很簡單。但是如果被黑客破解了賬戶的信息,就可
以暢通無阻地登錄 FTP 服務器,從而完全控制整臺服務器。
? 虛擬用戶模式:是這三種模式中最安全的一種認證模式,它需要為 FTP 服務單獨
建立用戶數據庫文件,虛擬出用來進行口令驗證的賬戶信息,而這些賬戶信息在
服務器系統中實際上是不存在的,僅供 FTP 服務程序進行認證使用。這樣,即使
黑客破解了賬戶信息也無法登錄服務器,從而有效降低了破壞范圍和影響。
ftp 是 Linux 系統中以命令行界面的方式來管理 FTP 傳輸服務的客戶端工具。
匿名開放模式
無需密碼驗證而直接登錄到 FTP 服務器。這種模式一般用來訪問不重要的公開文件。
vsftpd 服務程序默認開啟了匿名開放模式,我們需要做的就是開放匿名用戶的上傳、下
載文件的權限,以及讓匿名用戶創建、刪除、更名文件的權限。添加配置
現在就可以在客戶端執行 ftp 命令連接到遠程的 FTP 服務器了。在 vsftpd 服務程序的匿
名開放認證模式下,其賬戶統一為 anonymous,密碼為空。而且在連接到 FTP 服務器后,默
認訪問的是/var/ftp 目錄。我們可以切換到該目錄下的 pub 目錄中,然后嘗試創建一個新的目
錄文件,以檢驗是否擁有寫入權限
下面將目錄的所有者身份改成系統賬戶 ftp 即可
[root@linuxprobe ~]# ls -ld /var/ftp/pub drwxr-xr-x. 3 root root 16 Jul 13 14:38 /var/ftp/pub [root@linuxprobe ~]# chown -Rf ftp /var/ftp/pub [root@linuxprobe ~]# ls -ld /var/ftp/pub drwxr-xr-x. 3 ftp root 16 Jul 13 14:38 /var/ftp/pub本地用戶模式
相較于匿名開放模式,本地用戶模式要更安全,而且配置起來也很簡單。
anonymous_enable=NO 禁止匿名訪問模式
local_enable=YES 允許本地用戶模式
write_enable=YES 設置可寫權限
local_umask=022 本地用戶模式創建文件的 umask 值
userlist_enable=YES 啟用“禁止用戶名單”,名單文件為 ftpusers 和 user_list
userlist_deny=YES 開啟用戶作用名單文件功能
vsftpd 服務程序所在的目錄中默認存放著兩個名為“用戶名單”的文件(ftpusers 和 user_list)。
在采用本地用戶模式登錄 FTP 服務器后,默認訪問的是該用戶的家目錄。而且該目錄的默認所有者、所屬組都是該用戶自己,因此不存在寫入權限不足的情況。可以采用如下屬性修改默認更目錄。
local_root=/var/ftp 本地用戶的 FTP 根目錄虛擬用戶模式
虛擬用戶模式是這三種模式中最安全的一種認證模式
數據庫文件創建
創建用于進行 FTP 認證的用戶數據庫文件,其中奇數行為賬戶名,偶數行為密
碼。例如,我們分別創建出 ftpuser1和 ftpuser2兩個用戶,密碼均為 ftpuser2
但是,明文信息既不安全,也不符合讓 vsftpd 服務程序直接加載的格式,因此需要使
用 db_load 命令用哈希(hash)算法將原始的明文信息文件轉換成數據庫文件,并且降低
數據庫文件的權限(避免其他人看到數據庫文件的內容),然后再把原始的明文信息文件
刪除。
建立linux用戶
創建 vsftpd 服務程序用于存儲文件的根目錄以及虛擬用戶映射的系統本地
用戶。FTP 服務用于存儲文件的根目錄指的是,當虛擬用戶登錄后所訪問的默認位置。
由于 Linux 系統中的每一個文件都有所有者、所屬組屬性,例如使用虛擬賬戶“張三”
新建了一個文件,但是系統中找不到賬戶“張三”,就會導致這個文件的權限出現錯誤。為此,
需要再創建一個可以映射到虛擬用戶的系統本地用戶。簡單來說,就是讓虛擬用戶默認登錄
到與之有映射關系的這個系統本地用戶的家目錄中,虛擬用戶創建的文件的屬性也都歸屬于
這個系統本地用戶,從而避免 Linux 系統無法處理虛擬用戶所創建文件的屬性權限。
為了方便管理 FTP 服務器上的數據,可以把這個系統本地用戶的家目錄設置為/var 目錄
(該目錄用來存放經常發生改變的數據)。并且為了安全起見,我們將這個系統本地用戶設置
為不允許登錄 FTP 服務器,這不會影響虛擬用戶登錄,而且還可以避免黑客通過這個系統本
地用戶進行登錄。
建立用于支持虛擬用戶的 PAM 文件。
PAM(可插拔認證模塊)是一種認證機制,通過一些動態鏈接庫和統一的 API 把系統提
供的服務與認證方式分開,使得系統管理員可以根據需求靈活調整服務程序的不同認證方式。
通俗來講,PAM 是一組安全機制的模塊,系統管理員可以用來輕易地調整服務程序的認
證方式,而不必對應用程序進行任何修改。PAM 采取了分層設計(應用程序層、應用接口層、
鑒別模塊層)的思想。
新建一個用于虛擬用戶認證的 PAM 文件 vsftpd.vu,其中 PAM 文件內的“db=”參數為
使用 db_load 命令生成的賬戶密碼數據庫文件的路徑,但不用寫數據庫文件的后綴:
配置PAM認證
在 vsftpd 服務程序的主配置文件中通過 pam_service_name 參數將 PAM 認證
文件的名稱修改為 vsftpd.vu,PAM 作為應用程序層與鑒別模塊層的連接紐帶,可以讓應用程
序根據需求靈活地在自身插入所需的鑒別功能模塊。當應用程序需要 PAM 認證時,則需要在
應用程序中定義負責認證的 PAM 配置文件,實現所需的認證功能。
例如,在 vsftpd 服務程序的主配置文件中默認就帶有參數 pam_service_name=vsftpd,表
示登錄 FTP 服務器時是根據/etc/pam.d/vsftpd 文件進行安全認證的。現在我們要做的就是把
vsftpd 主配置文件中原有的 PAM 認證文件 vsftpd 修改為新建的 vsftpd.vu 文件即可。該操作中
用到的參數以及作用如表 11-4 所示。
anonymous_enable=NO 禁止匿名開放模式
local_enable=YES 允許本地用戶模式
guest_enable=YES 開啟虛擬用戶模式
guest_username=virtual 指定虛擬用戶賬戶
pam_service_name=vsftpd.vu 指定 PAM 文件
allow_writeable_chroot=YES允許對禁錮的FTP 根目錄執行寫入操作,而且不拒絕用戶的登錄請求
為虛擬用戶設置不同的權限
為虛擬用戶設置不同的權限。雖然賬戶 ftpuser1和 ftpuser1 都是用于 vsftpd 服務程
序認證的虛擬賬戶,但是我們依然想對這兩人進行區別對待。比如,允許ftpuser1上傳、創建、修
改、查看、刪除文件,只允許ftpuser2查看文件。這可以通過 vsftpd 服務程序來實現。只需新建
一個目錄,在里面分別創建兩個以 ftpuser1和 ftpuser2命名的文件,其中在名為 ftpuser1的文件
中寫入允許的相關權限(使用匿名用戶的參數):
也可以分別設置需求用戶登錄后看到不同的目錄,要設置權限
# cd /etc/vsftpd/vusers_dir/ # vi ftpuser1 local_root=/var/ftproot/ftpuser1# mkdir -p /var/ftproot/ftpuser1/ # chown -R virtual:virtual /var/ftproot/ftpuser1/然后再次修改 vsftpd 主配置文件,通過添加 user_config_dir 參數來定義這兩個虛擬用戶
不同權限的配置文件所存放的路徑。
測試
[root@linuxprobe ~]# ftp 192.168.10.10 ftpuser1/ftpuser2 ftp> mkdir files 257 "/files" created ftp> rename files database 350 Ready for RNTO. 250 Rename successful. ftp> rmdir database 250 Remove directory operation successful. ftp> exit 221 Goodbye.附錄:vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES listen=YES pam_service_name=vsftpd.vu userlist_enable=YES tcp_wrappers=YES dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log guest_enable=YES guest_username=virtual allow_writeable_chroot=YES user_config_dir=/etc/vsftpd/vusers_dir總結
以上是生活随笔為你收集整理的Linux系列教程(13)- 使用 ssh 服务管理远程主机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue使用speak-tts插件实现后台
- 下一篇: 三菱数控系统M70 M80,纯协议TCP