热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CentOS7配置SSH远程访问及控制

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

在实际生产环境中,不可能一直在服务器本地对服务器进行相应的管理,大多数企业服务器都是通过远程登录的方式进行管理的。当需要从一个工作站管理数以百计的服务器主机时,远程维护的方式将更占优势。

SSH 简介

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

一、配置OpenSSH服务端

OpenSSH是实现SSH协议的开源软件项目。在CentOS 7.3系统中。OpenSSH服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。

1.服务监听选项

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

[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服务 

二、使用SSH客户端程序

在CentOS 7.3系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp、sftp远程复制和文件传输命令等。

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

1)ssh远程登录

通过ssh命令可以远程登录sshd服务,为用户提供一个安全的Shell环境,以便对服务器进行管理和维护!

[root@kehuduan ~]# ssh xiaozhang@192.168.1.1

#CentOS 7配置SSH远程访问及控制
如果sshd服务器使用非默认的端口号(比如2222)则需要使用“-p”选项指定端口号。

[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、SecureCRT、Putty等图形工具,支持Telnet、SSH、SFTP等协议,方便对Linux主机进行远程管理。这些图形化工具都提供了中文界面、功能和操作比较简单,这里不再做深入介绍。

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

密钥对验证方式可以为远程登录提供提供更好的安全性,流程图:
#CentOS 7配置SSH远程访问及控制

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”用来指定公钥文件,这一步把刚才第二、三步结合在一起
/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访问控制

1)TCP Wrappers概述

TCP Wrappers将TCP服务程序“包裹”起来,代为坚挺TCP服务程序的端口,增加了一个安全监测过程,外联的连接请求必须先通过这层安全监测,获得许可证才能访问真正的服务程序。如图:
#CentOS 7配置SSH远程访问及控制
对于大多数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、策略配置格式

服务列表:客户机地址列表

服务器程序列表,客户端地址列表之间用冒号进行分隔,在列表内的多个项之间用逗号分隔。
1)服务程序列表
#CentOS 7配置SSH远程访问及控制
2)客户端地址列表
#CentOS 7配置SSH远程访问及控制

2、策略的应用顺序

先检查hosts.allow,找到匹配则允许访问
否则再检查hosts.deny,找到则拒绝访问
若两个文件中均无匹配策略,则默认允许访问

3、配置实例

要求:希望仅允许192.168.1.0网段的主机访问sshd服务

[root@fuwuduan ~]# vim /etc/hosts.allow 
sshd:192.168.1.
[root@fuwuduan ~]# vim /etc/hosts.deny 
sshd:ALL

推荐阅读
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
author-avatar
mobiledu2502873187
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有