LINUX——远程访问控制ssh

2023-05-16

文章目录

  • 一、什么是SSH?
  • 二、SSH远程管理----服务端
    • 2.1.SSH协议
    • 2.2服务监听选项
    • 2.3用户登录控制
  • Authentication:
    • 2.4登录验证方式
  • 三、TCP Wrappers控制
      • 3 .1.2保护机制的实现方式
      • 3.1.3访问控制策略的配置文件
      • 3.2.2策略的应用程序
      • 3.2.3策略应用实例
  • 四、使用SSH远程访问(模拟实验)
    • 4.1ssh远程登录
    • 4.2scp命令——远程安全复制
    • 4.3sftp——安全FTP
  • 五、构建密钥对验证
    • 5.1密钥对整体实现过程
    • 5.2密钥对验证实验
      • 5.2.1实验环境
      • 5.2.2实验步骤
      • 5.2.3验证实验

一、什么是SSH?

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

二、SSH远程管理----服务端

2.1.SSH协议

◆ 为客户机提供安全的shell环境,用于远程管理
◆ 默认端口:TCP 22
◆ 服务名称:sshd

服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
ssh_config:针对客户端
sshd_config:针对服务端

访问形式 端口号
SSH:秘文访问默认端口 TCP:22,一般广域网
TELNET:明文形式的访问 TCP:23,一般局域网
远程桌面 3389,图形化界面

2.2服务监听选项

◆ sshd 服务使用的默认的端口号为22,但是这个不是固定的,我们可以使用 -p 修改端口号。

◆ 在现实工作中,建议修改端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。禁用 DNS 反向解析可以提高服务器的响应速度。
ssh

1.[root@wang22~]# vim /etc/ssh/sshd_config
2…
3.#Port 22 #监听端口为 22, 端口号可以修改
4.#AddressFamily any
5.#ListenAddress 172.16.16.22 #监听地址可修改
6.#ListenAddress ::
7.Protocol 2 #使用 SSH V2 协议
8…
9.UseDNS no #禁用 DNS 反向解析
10…
例如,我们想登录主机ip地址为192.168.220.129,也是用root用户验证,执行以下操作即可
在这里插入图片描述

2.3用户登录控制

◆ 禁止root用户,空密码用户

◆ 登录时间,重试次数

◆ AllowUsers(白名单,仅允许,只有这些可以登录)

◆ DenyUsers(黑名单,仅拒绝,只有这些不行)

◆ AllowUsers不可与DenyUsers同时使用
1、通常禁止root 用户或者密码为空的用户登录,另外还可以限制登录的验证时间(默认为2分钟),及最大重试次数,超出后未登录成功会断开连接。

Authentication:

#LoginGraceTime 2m #登录验证时间2分钟
#PermitROOTLogin yes #yes代表允许root用户登录,no代表root用户登录
#StrictModes yes
#MAxAuthTries 6 #最大重试次数
#MaxSessions 10

注意:默认尝试最大的登录次数是3次,如果我们去掉MaxAuthTries 前面的#符号,就代表开启,但是远程登录还是不能尝试6次,只能登3次。

#LoginGraceTime 2m
#PermitROOTLogin yes
#StrictModes yes
MAxAuthTries 6 #去掉行头“#”
#MaxSessions 10

在这里插入图片描述
但是我们输入以下命令可以改变登录次数:
ssh -o NumberOfPasswordPrompts=n(n代表次数,只要比文件中的最大尝试次数大就可以了) 用户名@IP地址
在这里插入图片描述
2、如果只允许或禁止特定用户登录时,可以使用 AllowUsers (仅允许,“白名单”)或 DenyUsers(仅禁止,“黑名单”) 配置,两者 用法类似,但是二者不可同时使用。

◆ 例如,现有一台服务器,只允许zhangsan 和 lisi 用户登录,且 lisi用户只能从IP地址为192.168.220.131的主机远程登录, 则 可 以 在 /etc/ssh/sshd_config文件中添加配置即可,保存退出后。
◆ 记得要重启一下sshd服务。
在这里插入图片描述

2.4登录验证方式

◆ 登录验证对象

服务器中的本地用户账号

◆ 登录验证方式
密码验证:
就是我们平常使用最多的一种,使用用户名和密码登录,但是这种方式可能会遭遇暴力破解,防御能力较弱。
密钥对验证:
要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(私钥和公钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,会大大增强远程管理的安全性。
◆ 密钥对:包含公钥,私钥

公钥:服务器使用

私钥:客户保留

非对称秘钥:RSA

对称秘钥:3DES,AES
公钥和私钥要配对使用,如果使用公钥对数据进行加密,只有用相对应的私钥才能解密;如果使用私钥对数据进行加密时,那么只有用对应的公钥才能解密。

三、TCP Wrappers控制

3.1TCP Wrappers概述
3.1.1保护原理
在这里插入图片描述

3 .1.2保护机制的实现方式

◆ 方式一

通过tcpd主程序对其他服务程序进行包装

◆ 方式二

由其他服务程序调用libwrap.so.*链接库

3.1.3访问控制策略的配置文件

◆ /etc/hosts.allow

◆ /etc/hosts.deny
1.ldd which sshd 查看模块
3.2TCP Wrappers访问策略
3.2.1设置访问控制策略
◆ 策略格式

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

◆ 服务列表

多个服务以逗号分隔,ALL表示所有服务

◆ 客户机地址列表
多个地址以逗号分隔,ALL表示所有服务

允许使用通配符*和?

网段地址,如192.168.1 或者 192.168.1.0/255.255.255.0

区域地址,如.benet.com

3.2.2策略的应用程序

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

3.2.3策略应用实例

◆ 仅允许从以下地址访问sshd服务
主机192.168.100.100

网段192.168.200.0/24

◆ 禁止其他所有地址访问受保护的服务
1.[root@wang22 ~]# vim /etc/hosts.allow
2.sshd:192.168.100.100,192.168.200.*
3.[root@wang22 ~]# vim /etc/hosts.deny
4.sshd:ALL
优先读取allow,然后再读取deny
◆ 如果做黑名单,name白名单就不用写

四、使用SSH远程访问(模拟实验)

4.1ssh远程登录

◆ 通过 ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护,使用时应制定登录用户、目标主机ip地址作为参数。
◆ 命令基本格式
ssh user@host
◆ 例如:登录主机192.168.220.129 ,以对方的zhangsan用户进行验证。
在这里插入图片描述
◆ 如果 sshd服务器使用了非默认的端口号(22端口),那么登录时需要加 “-p” 指定端口号。
◆ 例如主机192.168.220.129的端口号为123,则是-p 123
1.[root@localhost~]# ssh -p zhangsan@192.168.220.129

4.2scp命令——远程安全复制

◆ 通过scp命令可以利用 SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标之外,还应指定目标主机地址、登录用户,执行后根据提示输入密码即可。
◆ 注意:如果是远程复制一个单独的文件的话直接用scp 就可以了,但是复制文件夹或目录的话,需要加 “-r” 选项。
命令基本格式
1.格式一:scp user@host:file 1 file 2
2.格式二:scp file 1 user@host:file 2
1、将本地文件复制到其他服务器

◆ 格式1:scp 本地文件路径 对方登录用户@ip地址:对方文件存放路径
◆ 例如:我们将本地 /opt下的 test01.txt这个文件复制到 远程服务器(ip地址是192.168.220.131)中的/opt目录下。
在这里插入图片描述
在这里插入图片描述
2、将远程服务器的文件复制到本地
◆ 格式2: scp 用户名@IP地址:远程服务器文件存放路径 本地存放路径
◆ 例如:将远程服务器(IP地址:192.168.220.129)/opt 目录下的文件test02.txt 复制到本地的/opt 目录下。
在这里插入图片描述
在这里插入图片描述

4.3sftp——安全FTP

◆ 通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件,采用了与FTP类似的登录过程和交互式环境,便于目录资源的管理。
◆ 命令基本格式
sftp user@host
get:下载
put:上传
1、下载文件:get
例如:我们使用sftp命令远程连接一台ip地址为192.168.220.129的主机,将其/opt 目录下的test01.txt,这个文件下载到本地:
在这里插入图片描述
2、上传文件:put
例如:还是上面的环境,我们登陆成功后,将本地的/opt 目录下的文件game01.txt 文件上传到远程连接的主机:

在这里插入图片描述

五、构建密钥对验证

5.1密钥对整体实现过程

在linux客户机中, 通过ssh_Keygen工具为当前用户创建密钥对文件,可用的加密算法为RSA或DSA,(ssh-keygen -t 选项用于指定算法类型)
具体过程分四步
第一步:
创建密钥对:
1.私钥文件:id_rsa
2.公钥文件:id_rsa.pub
第二步:
上传公钥文件:id_rsa.pub
第三步:
导入公钥信息,公钥库文件:~/.ssh/authorized_keys
第四步
使用密钥对验证方式

5.2密钥对验证实验

5.2.1实验环境

◆ 一台远程服务器(ip地址:192.168.220.129)
◆ 一台终端(用户名:caiwu;IP地址:192.168.220.131)

5.2.2实验步骤

第一步:在客户端创建密钥对
1、先在服务器开启公钥。文件位置:/etc/ssh/sshd_config
在这里插入图片描述
2、客户端用户caiwu 在本地创建公钥:

◆ 在客户机中创建密钥对
ssh-keygen -t 命令
◆ 可用的加密算法:RSA或DSA
在这里插入图片描述
第二步:将公钥文件上传到服务器
将生成下来的公钥文件上传至服务器,并部署到服务器端用户的公钥数据库中。
◆ 公钥文件 id_ecdsa.pub
◆ 私钥文件 id_ecdsa
在这里插入图片描述
◆ 输入以下命令:
ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.220.129
将本地公钥文件 id_ecdsa.pub 上传至服务器用户名为zhangsan的目录下。
在这里插入图片描述
第三步:来到服务器中,查看 zhangsan用户目录下是否有公钥文件
在这里插入图片描述

5.2.3验证实验

公钥导入服务器成功后,我们来到终端来验证一下
在这里插入图片描述
结果证明,登录时需要验证公钥的密码,我们输入密码后,即可连接成功。
注意:如果我们经常在一个终端登录服务器,且能确保这台终端是常用安全的,可以使用代理功能,只要第一次输入公钥密码,之后登录无法再输入密码。

◆ ssh-agent 实现代理权
◆ ssh-add 添加交互密钥
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINUX——远程访问控制ssh 的相关文章

  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时

随机推荐

  • LAMP架构以及论坛的安装

    LAMP架构 一 熟悉LAMP架构1 Linux平台2 Apache前台3 Mysql后台4 PHP中间连接 二 编译安装Apache httpd服务三 编译安装mysqld服务四 编译安装PHP解析环境五 安装论坛 一 熟悉LAMP架构
  • Android OpenCV基础(一、OpenCV入门)

    一 OpenCV概述 OpenCV xff08 Open Source Computer Vision Library xff09 是一个开源的计算机视觉库 xff0c 它提供了很多函数 xff0c 这些函数非常高效地实现了计算机视觉算法
  • Ubuntu安装最新版本NodeJs和Npm的方法

    第一种方法 通过NodeSource提供的官方包安装 自带最新npm xff08 最推荐 xff09 以下是 Nodejs 18 x的安装 xff0c 一行代码搞定 amp amp 的意思是前面的命令执行无误后 xff0c 再执行后面代码
  • 记录ubuntu 编译android 10 源码遇到的问题

    记录ubuntu 编译android 10 源码遇到的问题 1下载android 10源码 2repo工具下载及安装 xff08 参考网上教程 xff09 3建立源码文件夹 mkdir source cd source 4初始化仓库 我们将
  • @zabbix6.0安装部署(centeros 8 stream)

    文章目录 1 系统版本2 zabbix server官方查看3 平台安装和配置Zabbix服务器4 数据库安装5 Zabbix server配置数据库6 Zabbix前端配置PHP7 zabbix相关组件服务启动8 zabbix web配置
  • 使用Python处理excel表格(openpyxl)教程

    现在有个小任务 xff0c 需要处理excel中的数据 其实就是简单的筛选 xff0c excel玩的不熟练 xff0c 而且需要处理的表有70多个 xff0c 于是想着写个脚本处理一下吧 python中的openpyxl包可以轻松实现读写
  • Linux 6.1/6.2发布新补丁:缓解AMD处理器fTPM间歇性卡顿问题

    导读早些时候 xff0c AMD承认 xff0c 在Linux系统中开启AMD锐龙处理器的fTPM xff0c 将可能导致系统出现间歇性的卡顿 死机等情况 据悉 xff0c 该Bug在Linux 6 1内核中表现得最为明显 xff0c 这是
  • 完美解决主机与虚拟机相互通信,相互ping等问题

    笔者最近在学习使用linux时 xff0c 使用到了vm virtue box的虚拟机服务来简单的安装linux xff0c 但是在使用的时候发现了一个严重的问题 xff1a 虚拟机可以ping通主机 xff0c 主机却无法ping通虚拟机
  • CSS——CSS的选择器

    概念 xff1a CSS在渲染 HTML 页面是 xff0c 为了得到 HTML 中的标签进行样式渲染 xff0c 为我们提供了大量好用的各种选择器 xff0c 以便于我们在CSS 中拿到 HTML 的标签进行样式设置 一 基本选择器 基本
  • OA工作流的浅谈

    如今 xff0c 越来越多的人意识到将工作流引入解决方案的重要性 随着信息技术的发展和商业竞争的日益激烈 xff0c 人们不再满足于独立 分散的办公自动化和计算机应用 xff0c 而需要全面 集成的解决方案 作为一种管理和集成常规事务的技术
  • GPG key retrieval failed: [Errno 14] curl#60 - “Peer‘s Certificate has expired.“

    GPG key retrieval failed Errno 14 curl 60 Peer s Certificate has expired GPG key retrieval failed Errno 14 curl 60 Peer
  • html,css常见的几种垂直居中方式

    一丶什么是垂直居中 指当前标签在父级容器中垂直方向是居中显示的 实现垂直居中的几种方式 xff1a 1 table cell 43 vertical align 属性配合使用 2 absolute 43 transform 属性配合使用 3
  • STM32用XCOM调试助手打印不出数据

    STM32用XCOM调试助手打印不出数据 被困扰了一段时间的串口终于解决了 xff0c 用STM332F103ZET6写串口 xff0c 但是不懂为什么打开串口调试助手就是打印不出数据 首先检查了代码有没有错 xff0c 因为是按照网上的代
  • 基于蚁群算法的机器人路径规划matlab——代码注释超级详细,都能看懂

    采用蚁群算法路径规划matlab 本文对基本蚁群算法代码进行了详细的注释 每一步都简单易懂 程序在matlab中可直接运行 适合刚开始学习本算法的同学入门 蚁群算法是由意大利学者Dorigo提出的一种仿生智能算法 最早运用在旅行商问题上 蚁
  • java集合类(collection)

    一 集合类 collection Java中有哪些容器 xff08 集合类 xff09 Java中的集合类主要由Collection和Map这两个接口派生而出 xff0c 其中Collection接口又派生出三个子接口 xff0c 分别是S
  • linux安装程序和软件

    文章目录 一 解析Linux应用软件安装包二 rpm命令2 1 安装有依赖关系的 rpm软件包 xff0c 2 2 升级或更新 rpm软件包2 3 实列2 4 查询未安装的 rpm软件包文件 一 解析Linux应用软件安装包 通常Linux
  • Postman入门教程【没有废话,直入实战,绝对给力!】

    基础篇 Postman功能 xff08 https www getpostman com features xff09 主要用于模拟网络请求包快速创建请求回放 管理请求快速设置网络代理安装 下载地址 xff1a https www getp
  • U3D开发的逆天级大型游戏有哪些

    1 World of Diving 潜水世界 一款潜水游戏 潜水世界 xff1a http dx60 downyouxi com qianshuishijie zip 氛围不错 xff0c 不过细看建模好像不是特别精细的样子 2 The F
  • 线程安全(实现线程方式+线程状态+通信方式,sleep,wait,守护线程)

    目录 用户自定义线程 Java中实现多线程的方法 xff1a 如何停止一个正在运行的线程 1 说说什么是线程安全 xff1f 如何实现线程安全 xff1f 2 Java中线程的状态有哪些 xff1f 线程间的通信方式有哪些 xff1f 追问
  • LINUX——远程访问控制ssh

    文章目录 一 什么是SSH xff1f 二 SSH远程管理 服务端2 1 SSH协议2 2服务监听选项2 3用户登录控制 Authentication xff1a 2 4登录验证方式 三 TCP Wrappers控制3 1 2保护机制的实现