远程访问和控制

一.SSH远程管理

SSH Secure Shell )是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入 的用户口令。早期的 Telent (远程登录)、 RSH Remote Shell ,远程执行命令)、 RCP (Remote File Copy ,远程文件复制)等应用相比, SSH 协议提供了更好的安全性。 将以 OpenSSH 为例,介绍 Linux 服务器的远程管理及安全控制。 OpenSSH 是实现SSH 协议的开源软件项目,适用于各种 UNIX Linux 操作系统。关于 OpenSSH 项目的 更多内容可以访问其官方网站 http://www.openssh.com

 1.配置OpenSSH服务端

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

        sshd服务的默认配置文件时/etc/ssh/sshd_config,正确的调整相关配置项,可以进一步提高sshd远程登录的安全性,想了解更多配置可以参考man手册。

1)服务监听选项

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

[root@localhost ~]# vim /etc/ssh/sshd_config
.....
Port 22                         //监听端口为 22(默认的)
ListenAddress 172.16.16.22     //监听地址为 192.168.10.100(自行设置的)
Protocol 2                     //使用 SSH V2 协议
.....                          //省略部分内容
UseDNS no                     //禁用 DNS 反向解析
.....
[root@localhost ~]# systemctl restart sshd  //重启sshd服务

2)用户登录控制

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

[root@localhost ~]# vim /etc/ssh/sshd_config
......
#LoginGraceTime 2m        //验证时间两分钟
#PermitRootLogin yes      //默认允许root用户登录,no拒绝root登录
#MaxAuthTries 6           //最大重试次数,可能会受到PAM安全认证的影响,第三次失败后进断开
#MaxSessions 10           //控制用户在系统中的活动会话数量
......
PermitEmptyPasswords no   //禁止空密码用户登录
[root@localhost ~]# systemctl restart sshd

        只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置

AllowUsers 用户名1 用户名2...@主机地址        //允许某些用户登录
DenyUsers 用户名1 用户名2...@主机地址         //禁止某些用户登录

 3)登录验证方式(密码验证,密钥对验证)

密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最 为简便,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来 看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。

密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一 对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录 时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全 性。该方式不易被假冒,且可以免交互登录,在 Shell 中被广泛使用。

        在两者同时开启时,服务器优先使用安全性更高的密钥验证,若服务器对安全性要求较高建议禁用密码验证方式,只使用密钥验证。

        公钥库文件用来保存多个客户端上传的公钥文本,以便与客户端本地的私钥文件进行匹配。

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

2.使用SSH客户端程序

1)命令程序ssh,scp,sftp

  • ssh远程登录

        使用shh命令远程登录,指定登录用户和目标主机地址作为参数。

[root@localhost ~]# ssh zhangsan@192.168.10.101   //以对方服务器中zhangsan的身份,远程登录地址       为192.168.10.101的主机
[root@localhost ~]# ssh zhangsan@192.168.10.101
The authenticity of host '192.168.10.101 (192.168.10.101)' can't be established.
ECDSA key fingerprint is SHA256:cskSXQHc/ibSOioXDqUihDhAsQA3n6qEWmEgbPdeIR0.
ECDSA key fingerprint is MD5:28:8d:59:c9:3a:dd:ad:79:97:fb:5e:7c:1d:ad:6c:2e.
Are you sure you want to continue connecting (yes/no)? yes            //接受密钥
Warning: Permanently added '192.168.10.101' (ECDSA) to the list of known hosts.
zhangsan@192.168.10.101's password:                                   //输入密码
        当用户第一次登录 SSH 服务器时,必须接受服务器发来的 ECDSA 密钥(根据提示输 入“yes” )后才能继续验证。接收的密钥信息将保存到~ /.ssh/known_hosts 文件中。密码验 证成功以后,即可登录目标服务器的命令行环境中了,就好像把客户端的显示器、键盘连接 到服务器一样。
[zhangsan@localhost ~]$ whoami             //确认当前用户
zhangsan
[zhangsan@localhost ~]$ ifconfig ens33 | grep "inet "
//确认当前主机地址(引号内有空格)
inet 192.168.10.101 netmask 255.255.255.0 broadcast 192.168.10.255
[zhangsan@localhost ~]$ exit                  //退出当前主机
登出
Connection to 192.168.10.101 closed.
[root@localhost ~]# ls -a
.   anaconda-ks.cfg  .bash_logout   .bashrc  .pki  .tcshrc
..  .bash_history    .bash_profile  .cshrc   .ssh  .viminfo
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls
known_hosts
[root@localhost .ssh]# cat known_hosts 
192.168.10.101 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyN
TYAAABBBJ0X1Ea3kNSb5NpVp8Z4Mi5zwqdOpuIiwKeDIXyZA1nVGSbM50/7LPdkQX9c82gOQW2hBEpAK
zE1A2XyCf9nD+s=            //密钥信息

        当sshd服务器使用了匪默认的端口时,则登录时必须通过“-p”选项指定端口号。

、/**此环节中,/etc/ssh/sshd_config中的port值为221**/
[root@localhost .ssh]# ssh -p 221 zhangsan@192.168.10.101
zhangsan@192.168.10.101's password: 
  • scp远程复制
通过 scp 命令可以利用 SSH 安全连接与远程主机相互复制文件。使用 scp 命令时,除 了必须指定复制源、目标之外,还应指定目标主机地址、登录用户,执行后根据提示输入验证口令即可。

远程主机复制到本机 (如果远程服务器修改了端口则使用 -o 选项 加 port=端口号)

[root@localhost ~]# scp root@192.168.10.101:/etc/passwd /root   //从远程主机复制到本机
root@192.168.10.101's password: 
passwd                                                        100%  893     1.1MB/s   00:00    
[root@localhost ~]# ls
anaconda-ks.cfg  passwd

本机复制到远程主机(如果远程服务器修改了端口则使用 -P(大写) 选项 加 端口号)

[root@localhost ~]# scp -r /root/passwd root@192.168.10.101:/root/pass.txt
root@192.168.10.101's password: 
passwd                                                        100%  893   661.0KB/s   00:00    
[root@localhost ~]# ssh 192.168.10.101
root@192.168.10.101's password: 
Last failed login: Fri May 17 15:29:46 CST 2024 from 192.168.10.102 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri May 17 14:03:43 2024 from 192.168.10.1
[root@localhost ~]# ls
anaconda-ks.cfg  pass.txt
  • sftp安全FTP

        通过 sftp 命令可以利用 SSH 安全连接与远程主机上传、下载文件,采用了与 FTP 类 似的登录过程和交互式环境,便于目录资源管理。例如,以下操作依次演示了 sftp 登录、 浏览、文件上传等过程。

向远程主机上传文件

[root@localhost boot]# sftp -o  port=221 192.168.10.101
root@192.168.10.101's password: 
Connected to 192.168.10.101.
sftp> put /boot/config-3.10.0-1160.el7.x86_64 
Uploading /boot/config-3.10.0-1160.el7.x86_64 to /root/config-3.10.0-1160.el7.x86_64
/boot/config-3.10.0-1160.el7.x86_64                            100%  150KB  38.9MB/s   00:00    
sftp> exit
[root@localhost boot]# ssh -o port=221 192.168.10.101
root@192.168.10.101's password: 
Last login: Fri May 17 15:36:53 2024 from 192.168.10.102
[root@localhost ~]# ls
anaconda-ks.cfg  config-3.10.0-1160.el7.x86_64  pass.txt

将远程主机的内容下载到本地

[root@localhost boot]# sftp -o  port=221 192.168.10.101
root@192.168.10.101's password: 
Connected to 192.168.10.101.
sftp> get /boot/config-3.10.0-1160.el7.x86_64 /boot/bbb 
Uploading /boot/config-3.10.0-1160.el7.x86_64 to /root/config-3.10.0-1160.el7.x86_64
/boot/config-3.10.0-1160.el7.x86_64                            100%  150KB  38.9MB/s   00:00    
sftp> exit
[root@localhost boot]# ls
aaa
bbb
config-3.10.0-1160.el7.x86_64
config-6.8.7-1.el7.elrepo.x86_64

2)图形工具Xshell

        图形工具 Xshell Windows 下一款功能非常强大的安全终端模拟软件,支持 Telnet 、SSH、 SFTP 等协议,可以方便地对 Linux 主机进行远程管理。 安装并运行 Xshell 后,在新建会话窗口中指定远程主机的 IP 地址、端口号等相关信息, 然后单击“ 连接”按钮,根据提示接受密钥、验证密码后即可成功登录目标主机。

3.构建密钥对验证的SSH体系

        正如前面所提及的,密钥对验证方式可以为远程登录提供更好的安全性。下面将介绍在 CentOS 7.3 服务器、客户端中构建密钥对验证 SSH 体系的基本过程。如图 4.2 所示, 以 RSA 加密算法为例,整个过程包括四步,首先要在 SSH 客户端以 zhangsan 用户身份创建密钥对,并且要将创建的公钥文件上传至 SSH 服务器端,然后要将公钥信息导入服务器端的目标用户 lisi 的公钥数据库,最后以服务器端用户 lisi 的身份登录验证。

 

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

ssh-keygen -t 加密算法类型,后续不设置私钥位置默认在该宿主目录的.ssh隐藏文件夹中;然后是私钥短语用来对私钥文件进行保护,当使用私钥验证登录时必须正确提供此处所设置的短语。不设置也可以,但不建议这样操作。

[zhangsan@localhost ~]$ ssh-keygen -t rsa        //创建密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id_rsa):     //指定私钥位置
Created directory '/home/zhangsan/.ssh'.
Enter passphrase (empty for no passphrase):                           //设置私钥短语
Enter same passphrase again:                                          //确认私钥短语
Your identification has been saved in /home/zhangsan/.ssh/id_rsa.
Your public key has been saved in /home/zhangsan/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:J+Kj19rT1I2gxXfLdasWCJ4shkh/DtUWWn86PJ/GI7A zhangsan@localhost.localdomain
The key's randomart image is:

2).将公钥文件上传至服务器

        使用scp或sftp等上传文件

[zhangsan@localhost ~]$ scp ~/.ssh/id_ecdsa.pub root@192.168.10.101:/tmp

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

[root@localhost ~]# mkdir /home/lisi/.ssh/
[root@localhost ~]# cat /tmp/id_ecdsa.pub >> /home/lisi/.ssh/authorized_keys
[root@localhost ~]# tail -1 /home/lisi/.ssh/authorized_keys
ecdsa-sha2-nistp256
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLJSnBhscYBfnnHxSY
AJEBD4sNkTLMF7itcFGM33RdeXU89QNQkMnCrCJHzAlZURrzpXG6Mp62mz9gRXUnARk8s =
zhangsan@localhost
        由于 sshd 服务默认采用严格的权限检测模式( StrictModes yes ),因此还需注意公钥 库文件 authorized_keys 的权限 —— 要求除了登录的目标用户或 root 用户,同组或其他用户 对该文件不能有写入权限,否则可能无法成功使用密钥对验证。
[root@localhost ~]# ls -l /home/lisi/.ssh/authorized_keys
-rw-r--r-- 1 root root 192 8 月 14 19:49 /home/lisi/.ssh/authorized_keys
除此之外,应确认 sshd 服务是否支持密钥对验证方式。

4).客户端验证 

[zhangsan@localhost ~]$ ssh lisi@192.168.10.101
[lisi@localhost ~]$ whoami
lisi                    //登录成功

5).ssh-copy-id  用户名@主机地址

使用此命令可以代替上述的2,3步骤;验证密码后,会将公钥自动添加到目标主机user宿主目录下的.ssh/authorized_keys文件结尾。

[zhangsan@localhost .ssh]$ ssh-copy-id -o port=221 zhangsan@192.168.10.101
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/zhangsan/.ssh/id_rsa.pub"
/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
zhangsan@192.168.10.101's password: 
Permission denied, please try again.
zhangsan@192.168.10.101's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -o 'port=221' 'zhangsan@192.168.10.101'"
and check to make sure that only the key(s) you wanted were added.
[zhangsan@localhost .ssh]$ ssh -o port=221 192.168.10.101
Last login: Fri May 17 17:13:11 2024

二.TCP Wrappers的访问策略

         TCPWrappers机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny,分别用来设置允许和拒绝的策略。

1.策略的配置格式 

 服务程序列表(服务名称) :客户端地址列表

1).服务程序列表(服务名称)

  • ALL:代表所有的服务
  • 单个服务程序:如sshd“”
  • 多个服务程序:如“vsftpd ,sshd”

2).客户端的地址列表

  • ALL:代表任何客户端地址。
  • LOCAL:代表本机地址。
  • 单个IP地址:如“192.168.4.4”。
  • 网络段地址:如“192.168.4.0/255.255.255.0”。
  • 以“.”开始的域名:如“.bdqn.com”匹配bdqn.com域中的所有主机。
  • 以“.”结束的网络地址:如“192.168.4.”匹配整个192.168.4.0/24网段。
  • 嵌入通配符“*”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2*”
  • 匹配以10.0.8.2开头的所有IP地址。不可与以“.”开始或结束的模式混用。
  • 多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”。

2.基本原理

        关于TCPWrappers机制的访问策略,应用时遵循以下顺序和原则:首先检查 /etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;如果检查上述两个文件都找不到相匹配的策略,则允许访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值