Linux遠程訪問及控制

在實際生產環境中,不可能一直在服務器本地對服務器進行相應的管理,大多數企業服務器都是經過遠程登陸的方式進行管理的。當須要從一個工做站管理數以百計的服務器主機時,遠程維護的方式將更佔優點。算法

SSH 簡介

SSH是一種安全通道協議,主要用來實現字符界面的遠程登陸、遠程複製等功能。SSH協議對通訊雙方的數據傳輸進行加密處理,其中包括用戶登陸時輸入的用戶口令。比以往的Telnet(遠程登陸)、RSH(遠程執行命令)等傳統的方式相比,SSH協議提供了更好的安全性。shell

1、配置OpenSSH服務端

OpenSSH是實現SSH協議的開源軟件項目。在CentOS 7.3系統中。OpenSSH服務器由openssh、openssh-server等軟件包提供(默認已安裝),並已將sshd添加爲標準的系統服務。數據庫

1.服務監聽選項

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服務

2.用戶登陸控制

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服務

3.登陸驗證方式

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服務

2、使用SSH客戶端程序

在CentOS 7.3系統中,OpenSSH客戶端由openssh-clients軟件包提供(默認已安裝),其中包括ssh遠程登陸命令,以及scp、sftp遠程複製和文件傳輸命令等。app

1.命令程序(ssh、scp、sftp)應用

1)ssh遠程登陸

經過ssh命令能夠遠程登陸sshd服務,爲用戶提供一個安全的Shell環境,以便對服務器進行管理和維護!dom

[root@kehuduan ~]# ssh xiaozhang@192.168.1.1

Linux遠程訪問及控制
若是sshd服務器使用非默認的端口號(好比2222)則須要使用「-p」選項指定端口號。ssh

[root@kehuduan ~]# ssh -p 2222 xiaozhang@192.168.1.1
xiaozhang@192.168.1.1's password:                                       //輸入密碼
[xiaozhang@fuwuduan ~]$                                                       //登陸成功

2)scp遠程複製

[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」選項!

3)sftp安全FTP

經過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

2.圖形化工具

在Windows主機上可使用一些列圖形化工具Xshell、Putty等圖形工具,支持Telnet、SSH、SFTP等協議,方便對Linux主機進行遠程管理。這些圖形化工具都提供了中文界面、功能和操做比較簡單,這裏再也不作深刻介紹。

3、構建密鑰對驗證的SSH體系

密鑰對驗證方式能夠爲遠程登陸提供提供更好的安全性,流程圖:
Linux遠程訪問及控制

1)第一種實現方法:

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
//不用輸入密碼,便可鏈接,實驗完成!

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
//驗證明驗效果

使用密鑰對驗證的方式登陸時,不須要知道目標用戶的密碼,而是驗證客戶端用戶的私鑰短語並檢查私鑰、公鑰是否配對,這樣安全性更好。

4、TCP Wrappers訪問控制

1)TCP Wrappers概述

TCP Wrappers將TCP服務程序「包裹」起來,代爲監聽TCP服務程序的端口,增長了一個安全監測過程,外聯的鏈接請求必須先經過這層安全監測,得到許可證才能訪問真正的服務程序。如圖:
Linux遠程訪問及控制
對於大多數Linux發行版,TCP Wrappers是默認提供的功能。CentOS 7.3使用的軟件包是tcp_wrappers-7.6-77.el7.x86_64.rpm。

對應TCP Wrappers保護機制的兩種實現方式:
1.直接使用tcpd程序對其餘服務程序進行保護,須要運行tcpd;
2.由其餘網絡服務程序調用libwrap.so.*連接庫,不須要運行tcpd程序。
一般,連接庫方式的應用要更爲普遍,也更有效率。

2)TCP Wrappers的訪問策略

TCP Wrappers機制的保護對象爲各類網絡服務程序,針對訪問服務的客戶端地址進行訪問控制,對應的兩個策略文件爲/etc/hosts.allow和/etc/hosts.deny ,分別用阿里設置容許和拒絕的策略。

一、策略配置格式

服務列表:客戶機地址列表

服務器程序列表,客戶端地址列表之間用冒號進行分隔,在列表內的多個項之間用逗號分隔。
1)服務程序列表
Linux遠程訪問及控制
2)客戶端地址列表
Linux遠程訪問及控制

二、策略的應用順序

先檢查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
相關文章
相關標籤/搜索