SSH远程访问及控制

本文涉及的产品
访问控制,不限时长
简介:

    大多数企业服务器是通过远程登录的方式来进行管理的,如何更加安全、高效的远程管理网络中的各种服务器是作为网络管理人员的必修课。这里将针对Linux环境使用安全的SSH远程管理途径,以及通过TCP Wrappers机制为应用提供访问控制


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


配置OpenSSH服务端

    在RHEL系统中,OpenSSH服务器的openssh等软件包默认已经安装,并已添加为系统服务,只需配置并启动sshd服务,大部分用户(拥有合法的登录shell)都可以远程登录系统。sshd的配置文件位于/etc/ssh/sshd_config目录下,正确调整相关配置项,有助于提高sshd远程登录的安全性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~] # vim /etc/ssh/sshd_config 
Port 22                               // 默认端口号22,必要时可修改
ListenAddress 192.168.1.1             // 监听地址
Protocol 2                            // 使用SSH v2协议,比v1更安全
UseDNS no                             // 禁用DNS反向解析,提高服务器响应速度
 
LoginGraceTime 2m                     // 登录验证时间为2分钟
PermitRootLogin  yes                   // 禁止root用户登录,用普通用户登录后, su 切换为root更加安全
MaxAuthTries 6                        // 最大重试次数为6
PermitEmptyPasswords no               // 禁止空密码用户登录
 
AllowUsers ysf yang@192.168.3.110      // 当只允许某些用户登录时
DenyUsers yangshufan                   // 当只禁止某些用户登录时,注意两者不要同时使用
 
PasswordAuthentication  yes              // 启用密码验证
PubkeyAuthentication  yes                // 启用密钥对验证
AuthorizedKeysFile      . ssh /authorized_keys       // 指定公钥库数据文件
 
[root@localhost ~] # service sshd reload            //配置完后,需要更新服务
重新载入 sshd:                                            [确定]

    当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性较高的服务器,建议禁止密码验证方式,只允许密钥对验证方式;若没有特殊要求,则两种都可以启用



使用SSH客户端程序

    在Linux系统中,SSH客户端默认已安装,其中包括ssh、scp、sftp等命令。实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如Windows平台中的Xshell、SecureCRT、Putty等图形工具。

(1)ssh远程登录

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

1
2
3
4
5
[root@localhost ~] # ssh ysf@192.168.1.1           //如果不是默认端口,需要使用"-p 端口号"
Are you sure you want to  continue  connecting ( yes /no )?  yes          // 第一次连接,必须输入 yes
ysf@192.168.1.1's password:                        // 输入密码
Last login: Thu Dec 28 05:01:52 2017 from 192.168.1.2
[ysf@localhost ~]$


(2)scp远程复制

    通过scp命令可以利用SSH安全连接与远程主机互相复制文件

1
2
3
4
5
6
7
8
[root@localhost ~] # scp /etc/passwd  root@192.168.1.1:/root/passwd.txt       //将本地文件复制到远程主机
root@192.168.1.1's password: 
passwd                                                 100% 1915     1.9KB /s    00:00  
[root@localhost ~] # scp -r root@192.168.1.1:/home/   /opt                  //将远程主机的home目录复制到本地
root@192.168.1.1's password: 
.bash_profile                                         100%  176     0.2KB /s    00:00    
.bash_logout                                          100%   18     0.0KB /s    00:00    
[root@localhost ~] #


(3)sftp安全FTP

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

1
2
3
4
5
6
[root@localhost ~] # sftp ysf@192.168.1.1
Connecting to 192.168.1.1...
ysf@192.168.1.1's password: 
sftp > help
sftp > bye
[root@localhost ~] #



使用密钥对验证SSH的方式

    密钥对验证方式可以为远程登录提供更好的安全性,下面将介绍在Linux服务器、客户机中构建密钥对验证SSH体系的基本过程,如下图所示:

杨书凡05.png

1. 在客户机创建密钥对

1
2
3
4
5
6
7
8
9
10
11
[yang@localhost ~]$  ssh -keygen -t rsa                     //ssh-keygen 工具为当前用户创建密钥对文件,rsa为加密算法,也可以为dsa加密算法
Generating public /private  rsa key pair.
Enter  file  in  which  to save the key ( /home/yang/ . ssh /id_rsa ):             // 指定私钥位置,按Enter键确定
Created directory  '/home/yang/.ssh' .
Enter passphrase (empty  for  no passphrase):                               // 设置私钥密码,也可以设置为空,实现无密码登录,但使用密码更加安全
Enter same passphrase again:                                              // 确认密码
Your identification has been saved  in  /home/yang/ . ssh /id_rsa .
 
[yang@localhost ~]$  ls  -lh ~/. ssh /id_rsa *                            // 确认生成的密钥文件
-rw-------. 1 yang yang 1.8K 12月 29 08:47  /home/yang/ . ssh /id_rsa           // 私钥文件,不能泄露
-rw-r--r--. 1 yang yang  408 12月 29 08:47  /home/yang/ . ssh /id_rsa .pub       // 公钥文件,用来提供给服务器


2. 将公钥上传至服务器

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

    上面两个步骤有两种方式完成导入:

方式一:命令格式如下

ssh-copy-id    -i    公钥文件    目标主机用户@目标主机

1
2
3
4
5
6
[yang@localhost ~] # ssh-copy-id -i .ssh/id_rsa.pub ysf@192.168.1.1
ysf@192.168.1.1's password:               // 输入ysf的密码
Now try logging into the machine, with  "ssh 'ysf@192.168.1.1'" , and check  in :
   . ssh /authorized_keys
to  make  sure we haven 't added extra keys that you weren' t expecting.
[ysf@localhost ~] #        //验证密码后,会将公钥自动添加到宿主目录下的.ssh/authorized_keys


方式二:使用FTP、scp等方式上传到服务器,在将文件导入到目标用户的公钥数据库

1
2
3
4
5
6
7
8
9
10
[yang@localhost ~]$  scp  . ssh /id_rsa .pub root@192.168.1.1: /tmp          // 使用 scp 命令上传到服务器
root@192.168.1.1's password:                                           // 输入服务器root的密码
Could not chdir to home directory  /home/ysf : No such  file  or directory
id_rsa.pub                                            100%  408     0.4KB /s    00:00    
[yang@localhost ~]$  ssh   root@192.168.1.1                     // 远程登录到服务器
root@192.168.1.1's password: 
[root@localhost ~] # mkdir /home/ysf/.ssh                //将公钥导入到公钥数据库
[root@localhost ~] # cat /tmp/id_rsa.pub >> /home/ysf/.ssh/authorized_keys       
[root@localhost ~] # ls -l /home/ysf/.ssh/authorized_keys          //注意:公钥库文件的权限必须是root用户或宿主用户
-rw-rw-r--. 1 root root 408 12月 29 10:01 . ssh /authorized_keys

                         

4. 在客户端上使用密钥对验证

1
2
3
4
[yang@localhost ~]$  ssh  ysf@192.168.1.1
Enter passphrase  for  key  '/home/yang/.ssh/id_rsa' :             // 输入私钥密码,如未设置密码,则直接登录服务器
Last login: Fri Dec 29 10:57:12 2017 from 192.168.1.2
[ysf@localhost ~]$



TCP Wrappers访问控制

    TCP Wrappers将其他TCP服务程序包裹起来,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。对于大多数Linux发行版,TCP Wrappers是默认提供的功能。

杨书凡06.png


1. 策略的配置格式

    TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务程序的客户机地址进行访问控制。对应的策略文件为/etc/hosts.allow和/etc/hosts.deny,分别提供允许和拒绝的要求

配置格式如下:

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


其中,

(1)服务程序列表分为以下几类:

ALL:代表所有服务

单个服务程序:如“sshd”

多个服务程序组成的列表:如“httpd,sshd”,以逗号分隔


(2)客户机地址列表分为以下几类:

ALL:代表任何客户机服务

LOCAL:代表本机地址

单个IP地址:如“192.168.1.1”

网络段地址:如“192.168.1.0/255.255.255.0”或者“192.168.1.”

域名:如“.ysf.com”匹配ysf.com域中的所有主机

通配符*、?:前者代表任意长度字符,后者仅代表一个字符

多个客户机地址组成的列表:如“192.168.1.1,172.16.10.,.ysf.com”


2. 访问控制的基本原则

(1)*先检查hosts.allow,找到匹配则允许访问

(2)*否则再检查hosts.deny,找到则拒绝访问

(3)*若两个文件中均无匹配策略,则默认允许访问


    实际使用TCP Wrappers机制时,较为宽松的策略可以是“允许所有,拒绝个别”,较为严格的可以是“允许个别,拒绝所有”。前者只需在hosts.deny文件中添加相应的策略;而后者需要在hosts.allow中添加允许策略外,还要在hosts.deny文件中添加“ALL:ALL”的拒绝策略


例如:

1)*仅允许从主机61.63.65.67,网段192.168.2.0/24 地址访问sshd服务 ,*禁止其他所有地址访问受保护的服务

2)拒绝192.168.2.2访问httpd服务

1
2
3
4
5
6
[root@localhost ~] # vim /etc/hosts.allow
sshd:61.63.65.67,192.168.2.*
 
[root@localhost ~] # vim /etc/hosts.deny
sshd:ALL
httpd:192.168.2.2










本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/2055727,如需转载请自行联系原作者
相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
6月前
|
移动开发 监控 安全
通过SSH协议实现的屏幕局域网电脑监控:屏幕安全访问代码
随着科技的不断发展,网络安全问题愈发突出。为了确保屏幕数据的安全,我们需要一种高效可靠的监控方法。本文介绍了一种基于SSH协议的屏幕局域网电脑监控方案,同时提供了相关代码示例,确保屏幕数据的安全传输和访问。
289 0
|
关系型数据库 MySQL 网络安全
mysql只能通过ssh通道连接到内网,如何创建只能访问MySQL的SSH用户
mysql只能通过ssh通道连接到内网,如何创建只能访问MySQL的SSH用户
397 0
|
6月前
|
算法 安全 Shell
SSH:加密安全访问网络的革命性协议
SSH:加密安全访问网络的革命性协议
184 9
|
3月前
|
运维 安全 网络安全
"革新远程访问体验:Docker化部署webssh2,一键启动Web SSH客户端,让远程管理如虎添翼!"
【8月更文挑战第2天】Docker作为软件开发与运维的关键工具,以其轻量级、可移植及强隔离特性简化了应用部署。结合webssh2这一开源Web SSH客户端,可通过浏览器安全便捷地访问SSH服务器,无需额外软件。首先确保已安装Docker,接着拉取webssh2镜像并运行容器,映射端口以便外部访问。配置好SSH服务器后,通过浏览器访问指定URL即可开始SSH会话。此方案不仅提升了用户体验,还加强了访问控制与系统安全。
294 7
|
6月前
|
安全 Linux 网络安全
SSH 简介:安全远程访问的利器
SSH是加密网络协议,用于安全远程登录和数据传输。它基于公钥和私钥验证,加密传输确保通信安全。默认使用22端口。在Linux和macOS系统上预装,Windows需额外安装。基本用法包括远程登录(ssh username@hostname)、文件传输(scp source destination)和端口转发。推荐使用密钥对认证,限制登录尝试次数,并配置SSH代理以增强安全性。了解这些基础和技巧能提升远程服务器管理和文件传输效率。
81 3
SSH 简介:安全远程访问的利器
|
6月前
|
机器学习/深度学习 Linux 网络安全
ssh远程访问windows系统下的jupyterlab
ssh远程访问windows系统下的jupyterlab
124 3
|
6月前
|
弹性计算 运维 Shell
基于key验证多主机ssh访问
【4月更文挑战第30天】
75 1
|
6月前
|
存储 网络协议 Linux
如何使用内网穿透工具实现远程SSH访问Deepin系统
如何使用内网穿透工具实现远程SSH访问Deepin系统
|
6月前
|
存储 安全 网络安全
Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制。在使用 SSH 连接到远程 Git 存储库时,您可以使用 SSH 密钥对来确保安全性。以下是关于如何生成和使用 SSH 密钥对的详细步骤: 生成 SSH 密钥对
442 2
|
6月前
|
监控 安全 网络安全
局域网管理监控的远程访问控制:利用SSH和Python实现安全管理
在当今数字化时代,局域网管理监控对于确保网络安全至关重要。远程访问控制是一项关键任务,通过利用SSH(Secure Shell)和Python编程语言,我们可以实现更加安全的管理方法。本文将介绍如何使用这两者结合,为局域网管理提供可靠的远程访问控制。
287 1