在實際生產環境中,不可能一直在服務器本地對服務器進行相應的管理,大多數企業服務器都是經過遠程登陸的方式進行管理的。當須要從一個工做站管理數以百計的服務器主機時,遠程維護的方式將更佔優點。算法
SSH是一種安全通道協議,主要用來實現字符界面的遠程登陸、遠程複製等功能。SSH協議對通訊雙方的數據傳輸進行加密處理,其中包括用戶登陸時輸入的用戶口令。比以往的Telnet(遠程登陸)、RSH(遠程執行命令)等傳統的方式相比,SSH協議提供了更好的安全性。shell
OpenSSH是實現SSH協議的開源軟件項目。在CentOS 7.3系統中。OpenSSH服務器由openssh、openssh-server等軟件包提供(默認已安裝),並已將sshd添加爲標準的系統服務。數據庫
sshd服務使用的默認端口號爲22,必要時建議修改此端口號,並指定監聽服務的具體IP地址,以提升在網絡中的隱蔽性。除此以外,SSH協議的版本選用v2比v1的安全性要更好,禁用DNS反向解析能夠提升服務器的響應速度。vim
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務的主配置文件 ………… //省略部份內容 Port 22 //監聽端口爲22 ListenAddress 0.0.0.0 //監聽地址爲0.0.0.0,表示所有監聽 Protocol 2 //使用SSH v2的版本 UseDNS no //禁用DNS反向解析,提升響應速度 ………… //省略部份內容 [root@localhost ~]# systemctl restart sshd //從新啓動sshd服務
sshd服務默認容許root用戶登陸,但在網絡中是很大的安全隱患,廣泛的作法是普通用戶,而後切換到root用戶。安全
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務的主配置文件 ………… //省略部份內容 LoginGraceTime 2m //登陸驗證時間爲2分鐘 PermitRootLogin no //禁止root用戶登陸 MaxAuthTries 6 //最大重試次數爲6次 PermitEmptyPasswords no //禁止空密碼登陸 ………… //省略部份內容 [root@localhost ~]# systemctl restart sshd //從新啓動sshd服務
當但願只容許或禁止某個用戶登陸時,可使用AllowUsers或DenyUsers配置,二者用法相似(可是注意不要同時使用)。例如容許xiaoli和xiaozhang用戶登陸,且其中xiaozhang用戶僅能從IP地址爲192.168.1.2的地址遠程登陸。服務器
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務的主配置文件 ………… //省略部份內容 AllowUsers xiaoli xiaozhang@192.168.1.2 //多個用戶之間用空格進行分隔 [root@localhost ~]# systemctl restart sshd //從新啓動sshd服務
sshd服務支持兩種驗證方式: 1.密碼驗證:對服務器中的本地系統用戶的登陸名稱、密碼進行驗證。這種方式使用最爲簡便,可是系統用戶密碼存在可能遭遇密碼窮舉; 2.密鑰對驗證:要求提供相匹配的密鑰信息才能經過驗證。一般先在客戶端中建立一對密鑰,而後將公鑰文件存放到服務器指定位置。遠程登陸時,系統將使用公鑰、私鑰進行加密/解密驗證,這種方式不易被假冒,且能夠免交互登陸,在Shell中被普遍應用。
當密碼驗證、密鑰對驗證都啓用時,服務器將優先使用密鑰對驗證!沒有特殊要求,建議兩種方式都啓用!網絡
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務的主配置文件 ………… //省略部份內容 PasswordAuthentication yes //啓用密碼驗證 PubkeyAuthentication yes //啓用密鑰對驗證 AuthorizedKeysFile .ssh/authorized_keys //指定公鑰庫文件 ………… //省略部份內容 [root@localhost ~]# systemctl restart sshd //從新啓動sshd服務
在CentOS 7.3系統中,OpenSSH客戶端由openssh-clients軟件包提供(默認已安裝),其中包括ssh遠程登陸命令,以及scp、sftp遠程複製和文件傳輸命令等。app
經過ssh命令能夠遠程登陸sshd服務,爲用戶提供一個安全的Shell環境,以便對服務器進行管理和維護!dom
[root@kehuduan ~]# ssh xiaozhang@192.168.1.1
若是sshd服務器使用非默認的端口號(好比2222)則須要使用「-p」選項指定端口號。ssh
[root@kehuduan ~]# ssh -p 2222 xiaozhang@192.168.1.1 xiaozhang@192.168.1.1's password: //輸入密碼 [xiaozhang@fuwuduan ~]$ //登陸成功
[root@kehuduan ~]# scp root@192.168.1.1:/etc/passwd /mnt //從服務器下載文件 root@192.168.1.1's password: passwd 100% 2360 2.3KB/s 00:00 [root@kehuduan ~]# scp 123.txt root@192.168.1.1:/mnt //從客戶端上傳文件 root@192.168.1.1's password: 123.txt 100% 0 0.0KB/s 00:00
若是須要指定端口,使用「-P」選項!
經過sftp命令能夠利用SSH安全鏈接與遠程主機上傳、下載文件,採用了與FTP相似的登陸過程和交互式環境,便於目錄資源管理。
[root@kehuduan ~]# sftp root@192.168.1.1 root@192.168.1.1's password: Connected to 192.168.1.1. sftp> put 456.txt //上傳文件 Uploading 456.txt to /root/456.txt 456.txt 100% 0 0.0KB/s 00:00 sftp> get /root/789.txt //下載文件 Fetching /root/789.txt to 789.txt sftp> bye
在Windows主機上可使用一些列圖形化工具Xshell、Putty等圖形工具,支持Telnet、SSH、SFTP等協議,方便對Linux主機進行遠程管理。這些圖形化工具都提供了中文界面、功能和操做比較簡單,這裏再也不作深刻介紹。
密鑰對驗證方式能夠爲遠程登陸提供提供更好的安全性,流程圖:
1.在客戶端建立密鑰對
在LInux客戶端中,經過ssh-keygen工具爲當前用戶建立密鑰對文件,可用的加密算法爲ECDSA或DSA(ssh-keygen命令的「-t」選項用於指定算法類型)
root@kehuduan ~]# su - xiaowang //切換到用戶xioawang [xiaowang@kehuduan ~]$ ssh-keygen -t ecdsa //建立基於ECDSA算法的SSH密鑰對 Generating public/private ecdsa key pair. Enter file in which to save the key (/home/xiaowang/.ssh/id_ecdsa): //指定私鑰存放位置 Created directory '/home/xiaowang/.ssh'. Enter passphrase (empty for no passphrase): //設置私鑰短語 Enter same passphrase again: //確認所設置的短語 Your identification has been saved in /home/xiaowang/.ssh/id_ecdsa. Your public key has been saved in /home/xiaowang/.ssh/id_ecdsa.pub. The key fingerprint is: 13:c2:03:63:bc:2e:d8:7e:be:f1:1b:1d:95:6b:4c:49 xiaowang@kehuduan The key's randomart image is: +--[ECDSA 256]---+ | .+ E | | ..+ . o | | .+ . = | | . o = . | | o . S + | |. o . . + | | . .. . . | | . .o . | | oo.o. | +-----------------+ [xiaowang@kehuduan ~]$ ls -lh ~/.ssh/id_ecdsa* -rw-------. 1 xiaowang xiaowang 227 8月 8 16:45 /home/xiaowang/.ssh/id_ecdsa -rw-r--r--. 1 xiaowang xiaowang 179 8月 8 16:45 /home/xiaowang/.ssh/id_ecdsa.pub
新生成的密鑰對文件中,id_ecdsa是私鑰文件 ,權限爲600,需妥善保管;id_ecdsa.pub是公鑰文件,用來提供給SSH服務器。
2.將公鑰文件上傳至服務器
將剛纔生成的公鑰文件上傳到服務端用戶的公鑰數據庫中。
[xiaowang@kehuduan ~]$ scp ~/.ssh/id_ecdsa.pub root@192.168.1.1:/mnt root@192.168.1.1's password: //輸入密碼 id_ecdsa.pub 100% 179 0.2KB/s 00:00 //上傳成功
3.在服務器中導入公鑰文本
在服務器中,目標用戶(指用戶遠程登陸的帳號)的公鑰數據庫位於~/.ssh目錄,默認的文件名「authorized_keys」,須要本身手動建立!
[root@fuwuduan ~]# mkdir /home/xiaozhang/.ssh [root@fuwuduan ~]# cat /mnt/id_ecdsa.pub >> /home/xiaozhang/.ssh/authorized_keys [root@fuwuduan ~]# cat /home/xiaozhang/.ssh/authorized_keys ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJmtmVbjnjH6NbWBRQcFjbYHoDBILQYclqrIHbVe0oyA15IXd+WBGsOcX3FYX8FYnIPHfL36Auj7aWb2MuVqmac= xiaowang@kehuduan
4.在客戶端使用密鑰對驗證
[xiaowang@kehuduan ~]$ ssh xiaozhang@192.168.1.1 Last login: Thu Aug 8 16:03:33 2019 from 192.168.1.2 //不用輸入密碼,便可鏈接,實驗完成!
[root@kehuduan ~]# ssh-keygen -t ecdsa //以root爲例,生成root用戶的密鑰對文件 [root@kehuduan ~]# ssh-copy-id -i ~/.ssh/id_ecdsa.pub root@192.168.1.1 //「-i」用來指定公鑰文件,這一步把剛纔第2、三步結合在一塊兒 /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.1.1's password: //輸入服務端root用戶密碼 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.1'" and check to make sure that only the key(s) you wanted were added. [root@kehuduan ~]# ssh root@192.168.1.1 Last login: Thu Aug 8 17:03:20 2019 //驗證明驗效果
使用密鑰對驗證的方式登陸時,不須要知道目標用戶的密碼,而是驗證客戶端用戶的私鑰短語並檢查私鑰、公鑰是否配對,這樣安全性更好。
TCP Wrappers將TCP服務程序「包裹」起來,代爲監聽TCP服務程序的端口,增長了一個安全監測過程,外聯的鏈接請求必須先經過這層安全監測,得到許可證才能訪問真正的服務程序。如圖:
對於大多數Linux發行版,TCP Wrappers是默認提供的功能。CentOS 7.3使用的軟件包是tcp_wrappers-7.6-77.el7.x86_64.rpm。
對應TCP Wrappers保護機制的兩種實現方式: 1.直接使用tcpd程序對其餘服務程序進行保護,須要運行tcpd; 2.由其餘網絡服務程序調用libwrap.so.*連接庫,不須要運行tcpd程序。 一般,連接庫方式的應用要更爲普遍,也更有效率。
TCP Wrappers機制的保護對象爲各類網絡服務程序,針對訪問服務的客戶端地址進行訪問控制,對應的兩個策略文件爲/etc/hosts.allow和/etc/hosts.deny ,分別用阿里設置容許和拒絕的策略。
服務列表:客戶機地址列表
服務器程序列表,客戶端地址列表之間用冒號進行分隔,在列表內的多個項之間用逗號分隔。
1)服務程序列表
2)客戶端地址列表
先檢查hosts.allow,找到匹配則容許訪問 不然再檢查hosts.deny,找到則拒絕訪問 若兩個文件中均無匹配策略,則默認容許訪問
要求:但願僅容許192.168.1.0網段的主機訪問sshd服務
[root@fuwuduan ~]# vim /etc/hosts.allow sshd:192.168.1. [root@fuwuduan ~]# vim /etc/hosts.deny sshd:ALL