远程访问及控制

一、SSH远程管理

        SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的Telent(远程登录)、RSH(Remote Shell,远程执行命令)、RCP(Remote File Copy,远程文件复制)等应用相比.SSH协议提供了更好的安全性。

        将以OpenSSH为例,介绍Linux服务器的远程管理及安全控制。OpenSSH是实现SSH协议的开源软件项目,适用于各种LNIX、Linux操作系统。关于OpenSSH项目的更多内容可以访问其官方网站http: / /www . openssh.com。

二、配置OpenSSH服务端

        在CentOS 7,3系统中,OpenSSH 服务器由openssh、openssh一server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行“systemctl start sshd”命令即可启动sshd服务.包括root在内的大部分用户(只要拥有合法的登录Shell)都可以远程登录系统。

        sshd服务的配置文件默认位于/etc/ssh/sshd_config目录下,正确调整相关配置项,可以进一步提高shd远程登录的安全性。下面介绍最常用的一些配置项,关于sshd_config文件的更多配置可参考man手册页。

1、服务监听选项

        sshd服务使用的默认端口号为22,必要时建议修改此端口号.并指定监听服务的具体Р地址.以提高在网络中的隐蔽性。除此之外,SSH协议的版本选用V2比V1的安全性要更好.禁用DNS反向解析可以提高服务器的响应速度。

[root@lucky ~]# vim /etc/ssh/sshd_config 
17 Port 22                            //监听端口为22
19 ListenAddress 192.168.223.0        //监听地址为192.168.223.0网段
21 Protocol 2                         //使用SSH V2协议
115 UseDNS no                         //禁用DNS反向解析
.........                      
[root@lucky ~]# systemctl start sshd

2、用户登录控制

        sshd 服务默认允许root用户登录.但在Internet中使用时是非常不安全的。普遍的做法如下:先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。
        关于sshd服务的用户登录控制通常应禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为⒉分钟)及最大重试次数,若超过限制后仍未能登录则断开连接。

[root@lucky ~]# vim /etc/ssh/sshd_config 
 37 LoginGraceTime 2m          //登录验证时间为2分钟 
 38 #PermitRootLogin yes       //禁止root用户登录
 40 MaxAuthTries 6             //最大重试次数为6
 64 PermitEmptyPasswords no    //禁止空密码用户登录
...................
[root@lucky ~]# systemctl start sshd

        当希望只允许或禁止某些用户登录时.可以使用AllowUsers 或 DenyUsers配置,两者用法类似(注意不要同时使用)。例如,若只允许jerry、tsengyia和acmin 用户登录.且其中 admin 用户仅能够从P地址为61,23.24.25的主机远程登录,则可以在/etc/ssh/sshd_config配置文件中添加以下配置。远程访问及控制_第1张图片

3、登录验证方式 

        对于服务器的远程管理,除了用户账号的安全控制以外.登录验证的方式也非常重要。sshd 服务支持两种验证方式---密码验证.密钥对验证,可以设置只使用其中一种方式,也可以两种方式都启用。

        (1)密码验证:对服务器中本地系统用户的登录名称.密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒﹔从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
        ()密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建-对密钥文件(公钥、私钥).然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒.且可以免交互登录,在Shell中被广泛使用。

[root@lucky ~]# vim /etc/ssh/sshd_config 
PasswordAuthentication yes                   //启用密码认证
AuthorizedKeysFile    .ssh/authorized_keys   //启用密钥对认证
PubkeyAuthentication yes                     //指定公钥库文件
.............
[root@lucky ~]# systemctl start sshd

三、使用SSH客户端程序

1、命令程序ssh、scp、sftp

(1)通过ssh命令可以远程登录sshd服务.为用户提供一个安全的Shell环境,以便对服务器进行管理和维护.使用时应指定登录用户、目标主机地址作为参数。若要登录主机192.168.223.128,以对方服务器的王五

[root@deft ~]# ssh [email protected]
[email protected]'s password: 
Last failed login: Wed Dec 27 00:59:29 CST 2023 from 192.168.223.100 on ssh:notty
There were 4 failed login attempts since the last successful login.

[wangwu@lucky ~]$ whoami 
wangwu
[wangwu@lucky ~]$ /sbin/ifconfig ens33 | grep 'inet'
        inet 192.168.223.128  netmask 255.255.255.0  broadcast 192.168.223.255

        如果sshd服务器使用了非默认的端口号(如22),则在登录时必须通过“一p”选项指定端口号。例如,执行以下操作将访问主机192.168.4.22的22端口,以对方服务器的wangwu用户验证登录。

[root@deft ~]# ssh -p 22 [email protected]
[email protected]'s password: 
Last login: Wed Dec 27 00:59:33 2023 from 192.168.223.100
[wangwu@lucky ~]$ 

(2) scp远程复制

        通过 scp 命令可以利用SSH 安全连接与远程主机相互复制文件。使用scp 命令时.除了必须指定复制源、目标之外,还应指定目标主机地址、登录用户.执行后根据提示输入验证口令即可。例如.以下操作分别演示了下行.上行复制的操作过程,将远程主机中的/etc/passwd文件复制到本机.并将本机的/etc/vsftpd目录复制到远程主机。

[root@deft ~]# scp [email protected]:/etc/passwd /root/pwd.txt
           //将主机192.168.223.128的/etc/passwd/目录复制到本机/root/改名为pwd.txt
[email protected]'s password: 
passwd                                                                                                                     100% 2404     3.3MB/s   00:00    
[root@deft ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  pwd.txt  u789

[root@lucky ~]# scp -r /etc/vsftpd/ [email protected]:/opt
  //将本机的/etc/vsftp/目录复制到主机192.168.223.100的/目录并改名opt

(3)sftp安全ftp

        通过sftp命令可以利用SSH 安全连接与远程主机上传下载文件.采用了与FTP类似的登录过程和交互式环境.便于目录资源管理。

[root@lucky ~]# sftp [email protected]
[email protected]'s password: 
Connected to 172.16.37.13.
sftp> ls
131           133           134           135           263           bdqn   

 2、构建密钥对验证的SSH体系

(1)在客户端创建密钥对

        在Linux客户端中,通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为ECDSA或DSA (ssh--keygen命令的“一t”选项用于指定算法类型)。例如.以wangwu用户登录客户端,并生成基于ECDSA 算法的SSH密钥对〈公钥、私钥〉文件.操作如下所示。

[wangwu@lucky ~]$ ssh-keygen -t ecdsa     
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/wangwu/.ssh/id_ecdsa):   //设置私钥位置
Created directory '/home/wangwu/.ssh'.
Enter passphrase (empty for no passphrase):             //设置私钥密语
Enter same passphrase again:                            //确认所设置的短语

        上述操作过程中,提示指定私钥文件的存放位置时.一般直接按Enter键即可,最后生成的私钥.公钥文件默认存放在宿主目录中的隐藏文件夹.ssh 下。私钥短语用来对私钥文件进行保护

[wangwu@lucky ~]$ ls -lh ~/.ssh/id_ecdsa*         //确认生成的密钥文件
-rw------- 1 wangwu wangwu 227 12月 27 01:37 /home/wangwu/.ssh/id_ecdsa
-rw-r--r-- 1 wangwu wangwu 174 12月 27 01:37 /home/wangwu/.ssh/id_ecdsa.pub

        新生成的密钥对文件中. id_ecdsa是私钥文件.权限默认为600,对于私钥文件必须妥善保管.不能泄露给他人id_ecdsa , pub是公钥文件,用来提供给SSH服务器。

(2)将公钥上传给服务器

        将上一步生成的公钥文件上传至服务器,并部署到服务器端用户的公钥数据库中。上传公钥文件时可以选择SCP、FTP、Samba、HTTP 甚至发送E-mail等任何方式。例如,可以通过SCP方式将文件上传至服务器的/tmp录下。

[wangwu@lucky ~]$ scp /home/wangwu/.ssh/id_ecdsa.pub [email protected]:/tmp

3、在服务器中导入公钥文本

        在服务器中,目标用户(指用来远程登录的账号lisi)的公钥数据库位于一/. ssh目录,默认的文件名是“authorized_keys”。如果目录不存在,需要手动创建。当获得客户端发送过来的公钥文件以后,可以通过重定向将公钥文本内容追加到目标用户的公钥数据库。

[root@deft ~]# mkdir /home/lisi/.ssh/
[root@deft ~]# cat /tmp/id_ecdsa.pub >>/home/lisi/.ssh/authorized_keys
[root@deft ~]# ls -l /home/lisi/.ssh/authorized_keys 
-rw-r--r--. 1 root root 174 12月 27 01:49 /home/lisi/.ssh/authorized_keys

由于sshd 服务默认采用严格的权限检测模式〈StrictModes yes ),因此还需注意公钥库文件authorized_keys的权限——要求除了登录的目标用户或root 用户,同组或其他用户对该文件不能有写入权限,否则可能无法验证

(4)在客户端使用密钥对验证

        当私钥文件〈客户端)、公钥文件〈服务器)均部署到位以后,就可以在客户端中进行测试了。首先确认客户端中当前的用户为wangwu,然后通过ssh命令以服务器端用户lisi的身份进行远程登录。如果密钥对验证方式配置成功,则在客户端将会要求输入私钥短语.以便调用私钥文件进行匹配(若未设置私钥短语.则直接登入目标服务器)。

[wangwu@lucky ~]$ ssh [email protected]
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last failed login: Wed Dec 27 00:33:02 CST 2023 from 192.168.223.100 on ssh:notty
There were 3 failed login attempts since the last successful login.
[lisi@deft ~]$ whoami 
lisi





 

你可能感兴趣的:(服务器,linux,运维)