5.1 Linux SSH 服务

1、Telnet

传统的远程连接管理基本上都采用telnet,但是telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的(只能采用口令验证),就是很容易受到中间人攻击。

中间人攻击就是中间人冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。这样服务器和你之间的数据传送会被中间人做手脚,会出现很严重的安全问题。

2、SSH 简介

SSH为Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,它将客户端与服务端之间的消息通过加密保护起来,这样就无法被窃取或篡改了。

SSH 采用了多种认证加密方式 , 解决了传输中数据加密和身份认证等问题 , 比较有效的防止网络嗅探与IP欺骗等问题。相对于通过明文传输的Telnet,具有更高的安全性。

3、SSH 服务认证类型

SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据。

a. 口令认证

基于口令的安全验证就是使用服务器中系统帐号和密码进行验证,只要知道服务器的SSH连接帐号、密码、服务器IP和端口号,就可以通过ssh客户端登录到这台远程主机。要求设置密码时具有足够的复杂度才能提高安全性。

口令认证会受到中间人攻击

b. 秘钥认证

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数,多用于网络中,用来保护个人隐私等问题,维护网络使用安全。一般来说密钥加密的方法有三种类型:对称加密、非对称加密和Hash加密。

对称加密:只使用了一个密钥进行加密解密,也可以叫做单密钥加密。它对密钥本身没有特殊的要求,通信双方只要有一个相同的密钥就行,一个用户把自己需要发送的数据通过密钥加密成混乱的信息,接受方使用相同的密钥把接受到的信息还原成原始数据,这个方法可以在极短的时间内对大量信息进行加密解密。但是如果密钥在传输过程中就被截获,那么以后的加密过程就形同虚设。这个方法的优点是使用同一个密钥节省了加密解密所需的时间,缺点是无法保证密钥的安全性。

非对称加密:在加密和解密中使用了一对密钥,一个是公用密钥,它对外公开发布,另一个是私有密钥,由用户自己保存。从理论上讲,这种加密方式只要是用户的私有密钥没有丢失或者被窃,那么他们之间加密的信息是绝对不会被破解的。但是它的缺点也非常明显,就是加密速度非常缓慢。由于要进行大量的数学运算,即使加密少量的信息也需要花费大量的时间。

Hash加密:是通过数学运算,把不同长度的信息转化到128位编码中,形成Hash值,通过比较这个数值是否正确,来确定通信双方的合法性。这也可以说是数字签名,在数据传输后,可以通过比较Hash值来判断信息途中是否被截获修改,是否由合法的发送人发送或者合法的接收人接收等。用这种方法,可以防止密钥丢失的问题,具有不可抵赖性。很适用于商业信息的传递。

基于密钥认证

  • 1、为客户端创建一对密钥(公钥和私钥)
  • 2、把公钥放在需要访问的SSH服务器上,私钥存放在ssh客户端。
  • 3、客户端远程连接ssh服务器时,发送TCP连接请求,使用密钥进行安全验证。
  • 4、服务器收到请求之后,服务器查看自己的./ssh/authorized_keys中是否有用户的公钥。如果有,服务器使用用户公钥加密一段随机字符串,并发送给客户端。
  • 5、客户端使用本地的私钥解密后把解密字符串发送给服务器。
  • 6、服务器对比字符串是否一致,一致则允许登录。
4、SSH 服务安装

在RHEL或CENTOS系统中,OPENSSH服务由openssh、openssh-server、openssh-clients等软件包提供(默认已经安装)。

yum list all | grep "^openssh"

a. openssh 配置信息

官方站点

http://www.openssh.com

服务端主程序

/usr/sbin/sshd

客户端程序

/usr/bin/ssh

服务端主配置配置文件

/etc/ssh/sshd_config

客户端配置文件

/etc/ssh/ssh_config

b. /etc/ssh/sshd_config
#Port 22            					 		# 监听的端口(默认22),也可以使用多个Port
#ListenAddress 0.0.0.0				 	  # 监听的IP地址(默认监听所有IP)
SyslogFacility AUTHPRIV 				  # 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,日志存放目录/var/log/secure
#LogLevel INFO									  # 日志等级
#UseDNS yes        							  # dns反向解析,判断客户端来源是否正常合法,设定为 no 会让联连接速度比较快
#LoginGraceTime 2m						 		# 限制用户登录验证过程的时间(默认为2分钟)
#PermitRootLogin yes					 		# 允许ROOT用户远程登录
PermitRootLogin without-password  # 允许root在有秘钥主机登陆
#PermitEmptyPasswords no  				# 禁止密码为空的用户远程登录
#PubkeyAuthentication yes   			# 是否启用秘钥验证
#PasswordAuthentication yes 	 		# 是否启用密码验证
AuthorizedKeysFile      .ssh/authorized_keys   # 指定保存各用户公钥内容的数据文件位置,默认保存用户公钥信息的文件位于用户宿主目录
#PrintMotd yes			  			# 登入后是否显示出一些信息,即打印出 /etc/motd这个文档的内容
#PrintLastLog yes           # 显示上次登入的信息,如上次登入的时间、地点等
X11Forwarding yes		  			# 是否允许用户使用 X 程序
Subsystem   sftp    /usr/libexec/openssh/sftp-server  # 是否允许用户使用sftp其他限制(需要在位置文件添加):
DenyUsers 用户名         				# 拒绝指定用户远程登录系统,其他均允许
AllowUsers用户名		 						 	# 允许指定用户远程登录系统
AllowUsers 用户名 @ip_address  	# 允许指定某个账户来自指定的IP登录
c. 添加ssh登录信息
echo 'Warning! From now on,all of your operation has been record!' > /etc/motd
5、SSH_Client 远程连接

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

a. ssh 命令
  • 描述:远程登录
  • 语法:ssh 用户名@服务器地址

-p 指定sshd服务端口

# 方式1: 
ssh 用户名@服务器地址
#方式2: 
ssh -l 用户名  服务器地址
#方式3: 缺省时会尝试以当前的本地用户名进行登录
ssh  服务器地址

当用户第一次使用SSH连接到ssh服务器时,必须接受服务器发来的公钥(根据提示输入yes)后才能继续验证。接收的公钥信息将保存到~/.ssh/known_hosts文件中

# 查看公钥信息
cat ~/.ssh/known_hosts

b. sshd 访问控制列表

/etc/hosts.allow和/etc/hosts.deny是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。

/etc/hosts.allow

sshd:192.168.137.252:allow     	#允许 192.168.137.252 ip连接sshd服务
# sshd:192.168.137.*:allow      #允许 192.168.137.0	网段连接sshd服务

/etc/hosts.deny

sshd:all:deny				# 拒绝了所有sshd远程连接,:deny可以省略
  • 当 hosts.allow 和 host.deny 相冲突时,以hosts.allow设置为准。
c. 重启 tcpd 服务

Xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。

yum install -y xinetd
systemctl restart xinetd
d. scp 命令
  • 描述:远程复制文件/目录
  • 语法:scp [选项] 本地文件/目录 用户名@服务器地址:目标路径

-r:递归复制整个目录

-p:留原文件的修改时间,访问时间和访问权限。

-P:port 注意是大写的P, port是指定数据传输用到的端口号

-q:不显示传输进度条

# 从客户端拉取文件至当前目录下
scp root@192.168.137.6:/opt/test_ssh.txt .# 将文件推送至客户端
scp 999.sh root@192.168.137.6:/opt
  • 以上操作均在服务端完成
6、SSH_Client 密钥登录
a. ssh-keygen 命令
  • 描述:为当前用户创建密钥对文件,可用的加密算法为RSA或DSA
  • 语法:ssh-keygen [选项]

-t 指定算法类型,默认使用RSA算法

# 在客户端生成密钥
ssh-keygen -t rsa

# 查看密钥对
ll /root/.ssh

  • id_rsa是私钥文件,权限默认为600,对于私钥文件必须妥善保管,不能泄露给他人。
  • id_rsa.pub是公钥文件,用来提供给ssh服务器。
b. ssh-copy-id 命令
  • 描述:上传公钥到服务器
  • 语法:ssh-copy-id [选项] 用户名@服务器地址

-i 选项指定公钥文件

-p 选项指定端口号

# 上传公钥到服务器
ssh-copy-id -i root@192.168.137.253

# 测试密钥登录
ssh 192.168.137.253

7、SSH 服务防止暴力破解
  • 密码足够的复杂最好大于20位。密码要尽可能有数字、大小写字母和特殊符号混合组成。
  • 修改默认端口号
  • 不允许root账号密码登录,只能通过认证的秘钥来登录系统
  • 添加普通账号,授予root的权限,不允许密码登录,只能通过认证的秘钥来登录系统。
a. 服务端创建admin并提权
# 服务端创建admin用户
useradd admin
echo "admin:123456" | chpasswd# 给admin提权
vim /etc/sudoers

b. 客户端admin提交公钥
# 创建admin账户
useradd admin
su - admin# 生成密钥
ssh-keygen -t rsa# 提交公钥至服务器
ssh-copy-id -i root@192.168.137.253# 测试
ssh admin@192.168.137.253			# admin 密码123456
c. SSH 服务器安全优化设置
# 修改端口为2222
Port 2222
# 修改监听IP为内网ip            					 		
ListenAddress 192.168.137.253				 	  			  
# 关闭DNS反向解析									 
UseDNS no        							  
# 不允许 root 在没有密钥的主机上登录						 		
PermitRootLogin without-password					 		
# 启用密钥验证 				
PubkeyAuthentication yes
# 关闭密码验证   			
PasswordAuthentication no 	
# 重启 sshd 服务
systemctl restart sshd# 查看 sshd 端口
netstat -antup | grep sshd

d. 使用密钥登录
# 使用admin秘钥登陆
ssh admin@192.168.137.253 -p 2222

# 使用root密钥登录
ssh root@192.168.137.253 -p 2222

e. Windows 测试密钥登录

分别使用admin账号和root账号远程登录,登录均被拒绝

f. XShell 测试密钥链接
# 安装lrzsz文件传输工具
yum install -y lrzsz# 将公钥下载到windows桌面
sz /root/.ssh/id_rsa

新建XShell连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277813.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于CNN+数据增强+残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)+数据集+模型(四)

系列文章目录 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型(一) 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型&#xf…

jmeter,断言:响应断言、Json断言

一、响应断言 接口A请求正常返回值如下: {"status": 10013, "message": "user sign timeout"} 在该接口下创建【响应断言】元件,配置如下: 若断言成功,则查看结果树的接口显示绿色,若…

【期末复习向】n元gram的应用

当 n 1 时, 即出现 在 第 i 位 上 的基 元 w i 独 立于 历 史 。 一元文法也 被 写 为 uni-gram 或 monogram; 当 n 2 时 , 2-gram ( bi-gram ) 被称 为 1 阶 马 尔 可夫 链; 当 n 3 时 , 3-gram( tri-gram ) 被称为 2 阶马尔 可 夫 链 &am…

平面腔体谐振计算与仿真

PCB的电源网络是由电介质材料隔开的两个平行金属板所组成,可以通过以下的3种方法对其谐振模式进行分析: 1. 基于腔体模型的计算; 2. 基于SPICE等效电路; 3. 基于全波数值电磁算法的3D模型。 设计得当的前提下,上述3种方…

win10上使用pyinstaller工具打包python后在win7无法运行(运行报错)

问题现象 win10中使用pyinstaller工具打包python为exe后,在win7上运行报错: 无法启动此程序,因为计算机中丢失api-ms-win-crt-process-l1-1-0.dll。尝试重新安装该程序以解决此问题。或 无法启动此程序,因为计算机中丢失api-ms…

保障线程安全性:构建可靠的多线程应用

目录 引言 为什么线程安全性如此重要? 1. 竞态条件(Race Conditions) 2. 死锁(Deadlocks) 3. 数据竞争(Data Races) 4. 内存可见性(Memory Visibility) 面临的挑战…

vue3 使用antd 报错Uncaught TypeError--【已解决】

问题现象 使用最基本的 ant-design-vue 按钮demo 都报错 报错文字如下 Uncaught TypeError: Cannot read properties of undefined (reading value)at ReactiveEffect.fn (ant-design-vue.js?v597f5366:6693:87)at ReactiveEffect.run (chunk-K2VKR2AM.js?v25c381c3:461:…

分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测

分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测 目录 分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.GASF-CNN格拉姆角场-卷积神经网络的数据分类预测(完整源码和数据) 2.自…

《数据结构、算法与应用C++语言描述》- 构建哈夫曼树

哈夫曼树 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_29huffmanTree 定长编码与可变长编码 定长编码 每个字符都用固定长度的编码来表示。 例如假设一个文本是由字符 a、u、x 和 z 组成的字符串,每个字符用2位二进…

使用Python实现对word的批量操作

Python在平时写写小工具真是方便快捷,Pyhon大法好。以下所有代码都是找了好多网上的大佬分享的代码按照自己的需求改的。 调用的库为Python-docx、win32com、PyPDF2、xlwings(操作excel)。 因为公司的任务要对上千个word文件进行批量操作&a…

3小时快速入门自动化测试 —— Selenium测试工具

自动化测试 自动化测试简单来说就是利用自动化测试工具和自动化测试脚本来完成指定的测试任务,测试启动过程无需人工参与,但自动化测试之前的准备工作需要人工手动配置好。它是一种将重复性、繁琐的测试任务交给计算机自动执行的方法,能够显…

设施设备二维码巡检卡制作教程

通过凡尔码平台给每个设备生成对应的二维码,取代传统纸质巡检卡,微信扫码即可查看设备基本信息、填写设备日常检查记录,记录自动汇总后台,随时登录后台查看和导出数据,管理人员绑定凡尔码小程序即可随时了解设备巡检完…