Linux远程访问及控制

一、SSH远程管理

1. SSH远程管理概述

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。

SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性。

SSH客户端通过网络与SSH服务端建立连接,其具有以下两个特点:

1.数据传输是加密的,可以防止信息泄露

2.数据传输是压缩的,可以提高传输速度

常用的SSH客户端工具有Putty、Xshell、Secure CRT等

SSH服务端工具为OpenSSH

2. OpenSSH概述

OpenSSH是实现SSH协议的开源软件项目,适用于各种UNIX、Linux操作系统。

CentOS 7系统默认已安装openssh相关软件包,并已将sshd服务添加为开机自启动。

执行“systemctl start sshd”命令即可启动sshd服务

sshd服务使用的默认端口号为22

sshd服务的默认配置文件位于/etc/ssh/目录下,ssh_config和sshd_config都是ssh服务器的配置文件,二者的区别在于前者是针对客户端的配置文件,后者是针对服务端的配置文件。

3. 配置OpenSSH服务端

sshd_config配置文件的常用选项设置

vim /etc/ssh/sshd_config
Port 22 #监听端口默认为22,可对其进行修改,增强服务器安全性
ListenAddress 0.0.0.0 #监听地址为任意网段,也可以指定OpenSSH服务器的具体IP
LoginGraceTime 2m #登录验证时间为2分钟
PermitRootLogin no #禁止root用户登录,禁止该选项可避免root用户被暴力破解导致的安全隐患
MaxAuthTries 6 #最大重试次数为6
PermitEmptyPasswords no #禁止空密码用户登录
UseDNS no #禁用DNS反向解析,可提高服务器的响应速度 AllowUsers aa bb cc@192.168.88.88 #只允许aa、bb、cc用户登录,并且wangwu用户仅能够从IP地址为192.168.88.88的主机远程登录,多个用户以空格分隔
DenyUsers dd #禁止dd用户登录,用法与AllowUsers类似

注:AllowUsers与DenyUsers不要同时对同一用户使用

4. sshd服务的验证方式

sshd服务支持两种验证方式:

  1. 密码验证

    对服务器中本地系统用户的登录名称、密码进行验证。

    使用简便,同时也容易被暴力破解,生产环境中常常关闭该功能以确保服务器的登录安全。
  2. 密钥对验证

    要求提供相匹配的密钥信息才能通过验证。

    通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定为诶之。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证。

    可以有效的增强安全性,且可以通过设置进行免交互登录。

可在sshd_config文件中对验证方式进行设置

vim /etc/ssh/sshd_config
PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes #启用密钥对验证
AuthorizedKeysFile ./ssh/suthorized_keys #指定公钥库文件位置

注:当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。

5. 使用SSH客户端程序

(1)ssh远程登录

格式为:ssh [选项] 用户名@主机ip

例如:ssh -p 1234 aa@192.168.88.88 #使用aa用户通过端口号1234远程登录主机192.168.88.88

当用户第一次登录SSH服务器时,必须接受服务器发来的SCDSA密钥(根据提示输入“yes”)后才能继续验证。接收的密钥信息将保存到 ~/.ssh/known_hosts 文件中。密码验证成功后即可登录目标服务器的命令行环境中了。

常用选项 说明 示例
-p 指定端口,若不指定则默认为22 ssh -p 1234 aa@192.168.88.88
-l 指定用户名 ssh -l aa 192.168.88.88,同ssh aa@192.168.88.88
-b 指定源IP,通常在客户端有多IP的情况下使用 ssh -b 192.168.80.10 aa@192.168.88.88

(2)scp远程复制

scp(secure copy)是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,是Linux之间复制文件和目录的常用手段。相较于rcp,scp数据传输经过加密,而rcp是不加密的,因此scp可视为rcp的加强版。

命令格式为:scp [选项] 源文件 目标文件

例如:

scp aa@192.168.88.88:/etc/passwd /root/passwd88.txt   #下行复制,将远程主机192.168.88.88的passwd文件复制到本机的/root目录下,并重命名为passwd88.txt
scp -r /etc/ssh/ aa@192.168.88.88:/root #上行复制,将本机的/etc/ssh目录复制到远程主机192.168.88.88

注:命令中的地址需以绝对路径表示

常用选项 说明
-1 使用ssh1协议
-2 使用ssh2协议
-4 使用IPv4寻址
-6 使用IPv6寻址
-B 使用批处理模式,传输过程中不询问传输口令或短语
-C 允许压缩
-p 保留源文件的修改时间,访问时间以及访问权限等
-r 递归复制整个目录
-v 显示详细输出
-q 不显示传输进度条
-l 限制传输带宽,单位为Kbit/s
-P 指定传输端口号

(3)sftp

sftp(Secure FTP)由于使用了加密/解密技术,所以传输效率比普通FTP要低,但安全性更高,操作语法与ftp类似。

sftp aa@192.168.88.88
aa@192.168.88.88's password: #输入密码
Connected to 192.168.88.88.
sftp> get 文件名 #下载文件到ftp目录
sftp> put 文件名 #上传文件到ftp目录
sftp> quit #退出登录,也可用bye或exit
sftp下可使用命令 说明
bye 退出sftp
cd path 切换到“path”目录
chgrp grp path 将文件“path”的组更改为“grp”
chmod mode path 将文件“path”的权限更改为“mode”
chown own path 将文件“path”的所有者更改为“own”
df [hi] [path] 显示当前目录或包含“path”的文件系统
exit 退出sftp
get [-afpPrR] remote [local] 下载文件
reget [-fPpRr] remote [local] 继续下载文件
reput [-fPpRr] [local] remote 继续上传文件
help 帮助
lcd path 切换本地目录到“path”
lls [ls-options [path]] 显示本地目录列表
lmkdir path 创建本地目录
ln [-s] oldpath newpath 建立文件远程链接,-s为软链接
lpwd 显示本地工作当前目录
ls [-1afhlnrSt] [path] 显示远程目录列表
lumask umask 将本地掩码设置为“umask”
mkdir path 创建远程目录
progress 显示进度
put [-aPpRr] local [remote] 上传文件
pwd 显示远程工作目录
quit 退出sftp
rename oldpath newpath 重命名远程文件
rm path 删除远程文件
rmdir path 删除远程目录
symlink oldpath newpath 建立远程文件软链接
version 显示sftp版本
!command 在本地shell中执行“command”
! 回到本地shell
? 帮助

6. 密钥对验证的SSH体系

  1. 在客户端创建密钥对

    通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为RSA、ECDSA、DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)。
useradd aa
echo "aabbcc" | passwd --stdin aa
su -aa
ssh-keygen -t ecdsa #创建ecdsa密钥对
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/aa/.ssh/id_ecdsa): #指定私钥位置,回车将使用默认位置
Create directory '/home/aa/.ssh'. #生成的私钥、公钥文件默认放在宿主目录中的影长目录.ssh/下
Enter passphrase (Empty for no passphere): #设置私钥密码
Enter same passphrase again: #确认输入 ls -l .ssh/id ecdsa* #id_ecdsa是私钥文件,权限默认为600,id_ecdsa.pub是公钥文件,用来提供给SSH服务器
  1. 将公钥文件上传至服务器
方法一:
scp ~/.ssh/id_ecdsa.pub root@192.168.80.10:/opt
方法二:
cd ~/.ssh/
ssh-copy-id -i id_ecdsa.pub root@192.168.80.10

注1:方法一上传目标目录需有用户写入权限

注2:方法二可直接在服务器的/root/.ssh/目录中导入公钥文本

  1. 在服务器中导入公钥文本
mkdir /root/.ssh/
cat /opt/id_ecdsa.pub >> /root/.ssh/authorized_keys
  1. 在客户端使用密钥对验证
ssh root@192.168.80.10
root@192.168.80.10's password: #输入私钥密码
  1. 在客户机设置ssh代理功能,实现免交互登录
ssh-agent bash
ssh-add
Enter passphrase for /home/admin/.ssh/id_ecdsa: #输入私钥密码

二、TCP Wrappers访问控制

1. TCP Wrappers概述

(1)TCP Wrappers的作用

TCP Wrappers是一个将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全监测过程,外来的连接请求必须先通过这层安全监测,获得许可后才能访问真正的服务程序。

大多数Linux发行版,TCP Wrappers都是默认提供的功能,可使用命令"rpm -q tcp_wappers"查看是否已安装。

(2)TCP Wrappers保护机制的实现方式

  1. 直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序。
  2. 由其他网络服务程序调用libwrap.so.*链接库,不需要运行tcpd程序,此方式的应用更加广泛也更有效率。

使用ldd命令可以查看程序的libweap.so.*链接库

ldd $(which ssh vsftpd)

2. TCP Wrapper访问策略

(1)TCP Wrappers的策略文件

TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。

对应的两个策略文件为/etc/osts.allow和/etc/hosts.deny,分别同来设置允许和拒绝的策略,即白名单与黑名单。

(2)策略文件的配置格式

<服务程序列表>:<客户端地址列表>

  1. 服务程序列表

    ALL:代表所有的服务

    单个服务程序:如“vsftpd”

    多个服务程序组成的列表:如“vsftpd,sshd”

  2. 客户端地址列表

    ALL:代表任何客户端地址

    LOCAL:代表本机地址

    多个地址以逗号想分割

    允许使用通配符“*”和“?”,前者代表任意长度字符,后者仅代表一个字符

    网段地址,如192.168.88.或者192.168.88.0/255.255.255.0

    区域地质,如“.abc.com”匹配abc.com域中的所有主机

(3)TCP Wrappers机制的基本原则

首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;

否则继续查看/etc/hosts.deny文件,如果找到相匹配策略,则拒绝访问;

如果检查上述两个文件都找不到相匹配的策略,则允许访问。

graph TD
A(客户端请求) -->B(TCP Wrappers访问控制)
B --> C(检查/etc/hosts.allow)
C -->|有| D(允许访问)
C -->|无| E(检查/etc/hosts.deny)
E -->|有| F(拒绝访问)
E -->|无| D(允许访问)
G[TCP Wrappers]

(4)访问策略设置

访问需求 具体操作
允许所有,拒绝个别 只需在/etc/hosts.deny文件中添加相应的拒绝策略
允许个别,拒绝所有 除了在/etc/hosts.allow中添加允许策略之外,还需在/etc/hosts.deny文件中设置“ALL:ALL”的拒绝策略
例如:
只允许IP地址为12.0.0.1的主机或者位于192.168.88.0/24网段的主机访问sshd服务,其他地址全部拒绝
vi /etc/hosts.allow
sshd:12.0.0.1,192.168.88.
vi /etc/hosts.deny
sshd:ALL

Linux远程访问及控制的更多相关文章

  1. 公钥-私钥 白名单-黑名单 Linux 远程访问及控制(SSH)

    远程访问及控制一.SSH远程管理二.OpenSSH服务器① SSH (Secure Shell)协议② OpenSSH三.配置OpenSSH服务器举例四.sshd 服务支持两种验证方式五.使用SSH客 ...

  2. Linux远程访问及控制(SSH)

    1.ssh协议:用于远程登录,端口号:22/tcp 配置文件: 1)服务器端口:/etc/ssh/sshd_config 2)客户端 :/etc/ssh/ssh_config 2.服务器监听选项: U ...

  3. Linux网络服务10——远程访问及控制

    Linux网络服务10--远程访问及控制 一.SSH概述 1.SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数 ...

  4. 技术漫谈 | 远程访问和控制云端K8S服务器的方法

    对于部署在云端的K8S容器编排系统,可以先通过SSH远程登录到K8S所在主机,然后运行kubectl命令工具来控制K8S服务系统.然而,先SSH登录才能远程访问的二阶段方式,对于使用Linux桌面或者 ...

  5. SSH 远程访问及控制 ( 早上好,我是派大星,上帝派来爱你的那颗星)

    远程访问及控制 1.SSH远程管理,TCP Wrappers访问控制 2.配置密钥对验证 1.SSH远程管理,TCP访问控制 SSH是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能: ...

  6. Linux iptables 应用控制访问SSH服务

    Title:Linux iptables 应用控制访问SSH服务  --2012-02-23 17:51 今天用到了以前从来没有用到过的,iptables控制访问,只允许外部访问SSH服务(22号端口 ...

  7. Linux systemd资源控制初探

    Linux systemd资源控制初探 本文记录一次cgroup子目录丢失问题,并简单探索了Linux systemd的资源控制机制. 问题现象 我们希望通过systemd拉起服务并通过cgroup限 ...

  8. PHP来控制Linux,ssh2来控制服务器端

    注意:我们用PHP来控制Linux,php环境可以在windows也可以在linux,但是我们要控制的机器是一台linux(被控制的linux关闭selinux和firewalld). 如果php在l ...

  9. Linux网络服务第三章远程访问及控制

    1.笔记 655355:端口限制 监听地址:对外提供服务的地址 AllowUsers:仅允许用户登录 DenyUsers:仅禁止用户登录 AllowUsers-用户名-公网地址 ssh/id_rsa. ...

随机推荐

  1. Python 安装第三方模块时 报Retrying(Retry(total=4, connect=None, read=None, redirect=None, status=None))...[WinError 10061]由于目标计算机积极拒绝,无法连接 错误

    今日在安装ddt模块时(Windows系统),cmd报了一个以前从未见过的错误,如下图所示: 经百度,知是镜像源的问题,将安装命令改成如下命令: pip install ddt -i https:// ...

  2. Centos 7 上 查看MySQL当前使用的配置文件my.cnf的方法

    my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载.总的来说,my.cnf类似与window中my.ini 使用locate my.cnf命令可 ...

  3. Zabbix监控报警Lack of free swap space on Zabbix server解决办法

    故障描述: Lack of free swap space on Zabbix server 故障原因: 情况一:云主机:因为Zabbix监控没有考虑虚拟主机的swap分区情况. 情况二:物理主机:说 ...

  4. 获取iframe外的document

    在iframe中点击弹出层外部分弹出层消失,但是点击iframe外部分就操作不了弹出层了,被这个问题困扰了不少时间,今天得以解决,代码如下: 说明:$(top.document,document).c ...

  5. hisql orm 框架insert数据写入教程

    hisql.net 官网(文档编写中) HiSql 源码(github) https://github.com/tansar/HiSql git clone https://github.com/ta ...

  6. 最新RabbitMQ安装指南2021.07

    一.RabbitMQ入门及安装 1.入门及安装 01 概述 简单概述: RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,支持多种客户端(语言),用于在分布式系统中存储消 ...

  7. HashMap原理及源码分析

    HashMap 原理及源码分析 1. 存储结构 HashMap 内部是由 Node 类型的数组实现的.Node 包含着键值对,内部有四个字段,从 next 字段我们可以看出,Node 是一个链表.即数 ...

  8. Solon Web 开发,二、开发知识准备

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  9. ComboBox行高

    //行高至少大于20 public static void SetComboBoxLineHeight(ComboBox list, int itemHeight) { list.DropDownSt ...

  10. 【刷题-LeetCode】223. Rectangle Area

    Rectangle Area Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectang ...