Linux中ssh登录协议

news2024/12/28 19:47:54

目录

一.ssh基础

1.ssh协议介绍

2.ssh协议的优点

3.ssh文件位置

二.ssh原理

1.公钥传输原理(首次连接)

2.ssh加密通讯原理

(1)对称加密

(2)非对称加密

3.远程登录

三.服务端的配置

常用的配置项

实际操作

1.修改默认端口 

2.黑白名单列表

四.ssh服务的最佳实践

五.使用秘钥对及免交互验证登录

1.过程原理

2.登录方式

免密登录实操

六.免密登录脚本

七.pssh轻量级自动化运维工具


一.ssh基础

1.ssh协议介绍

SSH(Secure  Shell)是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。

2.ssh协议的优点

(1)数据传输是加密的,可以防止信息泄漏

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

3.ssh文件位置
服务名主程序配置文件
服务端openssh - server/usr/sbin/sshd/etc/ssh/sshd_config
客户端openssh - clients/usr/bin/ssh/etc/ssh/ssh_config

密钥存放位置

自己的密钥:/etc/ssh/

其他人的密钥:家目录/.ssh/know_host

二.ssh原理

1.公钥传输原理(首次连接)
  • 客户端发起链接请求

  • 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)

  • 客户端生成密钥对

  • 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密

  • 客户端发送加密值到服务端,服务端用私钥解密,得到Res

  • 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)

  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

2.ssh加密通讯原理
(1)对称加密

1>、概念 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用

2>、常用算法 在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

3>、特点 :加密方和解密方使用同一个密钥; 加密解密的速度比较快,适合数据比较长时的使用; 密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;

4>、优缺点 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。 对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担

(2)非对称加密

1>、概念 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

2>、常用算法

  • RSA(RSA algorithm):目前使用最广泛的算法

  • DSA(Digital Signature Algorithm):数字签名算法,和 RSA 不同的是 DSA仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快

  • ECC(Elliptic curve cryptography,椭圆曲线加密算法)

  • ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC和 DSA的结合,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障

3>、原理 首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下

4>、优缺点 相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。

3.远程登录

远程登录方法一:ssh    [远程主机用户名]@[远程服务器主机名或IP地址]   -p    port

-l :-l 选项,指定登录名称。
-p: -p 选项,指定登录端口(端口号默认为22,当服务端的端口非默认时,需要使用-p 指定端口进行登录)

当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh   IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。

3.1第一次远程登录

第二次或之后的登录,密钥匹配成功则不会有验证信息

可以通过修改配置文件/etc/ssh/ssh_config的第35行,使得在登录时没有验证信息

方法二:跳板连接

选项:-t

[root@localhost .ssh]#iptables -A INPUT -s 192.168.240.12 -j REJECT 
#模拟防火墙
[root@localhost ~]# ssh -t 192.168.240.11  ssh -t 192.168.240.12  
#方便跳板连接

三.服务端的配置

进入服务器配置文件 /etc/ssh/sshd_config

常用的配置项
ListenAddress ip
#监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。
LoginGraceTime 2m
#用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒
PermitRootLogin yes 
#默认 ubuntu不允许root远程ssh登录
StrictModes yes   
#检查.ssh/文件的所有者,权限等
MaxAuthTries 
#用来设置最大失败尝试登陆次数为6
MaxSessions  10         
#同一个连接最大会话
PubkeyAuthentication yes     
#基于key验证
PermitEmptyPasswords no      
#密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
PasswordAuthentication yes   
#基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 
#单位:秒
ClientAliveCountMax 3 
#默认3
UseDNS yes 
#提高速度可改为no   内网改为no  禁用反向解析
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups    #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单  黑名单
实际操作
1.修改默认端口 

vim  /etc/ssh/sshd_config

2.黑白名单列表

白名单:

进入配置文件/etc/ssh/sshd_config 添加后重新启动程序

实验结果:

在主机192.168.240.12上可以登录

在主机192.168.240.13上不能登录

黑名单:

DenyUsers  lisi:不允许任何主机使用lisi用户登录

四.ssh服务的最佳实践

  1. 建议使用非默认端口 22

  2. 禁止使用protocol version 1

  3. 限制可登录用户 白名单

  4. 设定空闲会话超时时长

  5. 利用防火墙设置ssh访问策略

  6. 仅监听特定的IP地址 公网 内网

  7. 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs

  8. 使用基于密钥的认证

  9. 禁止使用空密码

  10. 禁止root用户直接登录

  11. 限制ssh的访问频度和并发在线数

  12. 经常分析日志 分离

五.使用秘钥对及免交互验证登录

1.过程原理

  1>客户端发起ssh请求,服务器会把自己的公钥发送给用户

  2>用户会根据服务器发来的公钥对密码进行加密

  3>加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

2.登录方式

(1)首先在客户端生成一对密钥(ssh-keygen)

(2)并将客户端的公钥ssh-copy-id 拷贝到服务端

(3)当客户端再次发送一个连接请求,包括ip、用户名

(4)服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc

(5)服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端

(6)得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端

(7)服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

免密登录实操

1.生成秘钥文件,将密钥文件中的公钥复制到服务端

2.切换到服务端查看

3.实验结果,登录服务端(不需要密码)

六.免密登录脚本

将脚本写进一个文件并执行该文件

#!/bin/bash
PASS=123123
#设置网段最后的地址,4-255之间,越小扫描越快
END=254

IP=`ip a s ens33 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.

rm -f /root/.ssh/id_rsa
[ -e ./SCANIP.log ] && rm -f SCANIP.log
for((i=3;i<="$END";i++));do
ping -c 1 -w 1  ${NET}$i &> /dev/null  && echo "${NET}$i" >> SCANIP.log &
done
wait

ssh-keygen -P "" -f /root/.ssh/id_rsa
rpm -q sshpass || yum -y install sshpass
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IP

AliveIP=(`cat SCANIP.log`)
for n in ${AliveIP[*]};do
sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}:
done

七.pssh轻量级自动化运维工具

EPEL源中提供了多个自动化运维工具

  • pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh

    和scp的多个并行工具,项目:http://code.google.com/p/parallel-ssh/

  • pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程

    主机上的命令。 可使用几种不同的远程shell服务,包括rsh,Kerberos IV和ssh,项目:

    https://pdsh.googlecode.com/

  • mussh:Multihost SSH wrapper,是一个shell脚本,允许使用命令在多个主机上通过ssh执行命

    令。 可使用ssh-agent和RSA/DSA密钥,以减少输入密码,项目:

    MUltihost SSH Wrapper download | SourceForge.net

pssh 命令选项如下

加强版的ssh
-H:主机字符串,内容格式”[user@]host[:port]” 
-h file:主机列表文件,内容格式”[user@]host[:port]” 
-A:手动输入密码模式
-i:每个服务器内部处理信息输出
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输出文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-P:打印出服务器返回信息
-v:详细模式
--version:查看版本
安装需要配置开发源
[root@ky15-1 yum.repos.d]# cd /etc/yum.repos.d
[root@ky15-1 yum.repos.d]# vim CentOS-Base.repo
#最后一行添加
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
        https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
        https://mirrors.huaweicloud.com/epel/$releasever/x86_64
        https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0
yum install epel-release.noarch -y
#推荐
[root@ky15-1 yum.repos.d]#yum clean all
#清除缓存
yum  install  pssh  -y
[root@ky15-1 yum.repos.d]# pssh
[root@ky15-1 yum.repos.d]# ssh-keygen 
#一路回车
[root@ky15-1 yum.repos.d]# ssh-copy-id 192.168.240.12
[root@ky15-1 yum.repos.d]# ssh-copy-id 192.168.240.13
#上传秘钥对
[root@ky15-1 yum.repos.d]# pssh -H 192.168.240.12 hostname -i
[1] 02:10:10 [SUCCESS] 192.168.240.13
#管理多台,写入一个文件
[root@ky15-1 yum.repos.d]#vim hosts.txt
[root@ky15-1 yum.repos.d]#cat hosts.txt 
192.168.240.12
192.168.240.13
[root@ky15-1 yum.repos.d]#pssh -h hosts.txt  -i   hostname 
#或者
[root@ky15-1 yum.repos.d]# pssh -H "192.168.240.12 192.168.240.13" -i cat /etc/passwd

实验结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++信息学奥赛 数据结构认识

数据结构 1.1数据结构分类 1.2基本数据类型 1.3数字编码 1.4字符编码 1.1数据结构分类 数据结构如同一副稳固而多样的框架。为数据的有序组织提供了蓝图&#xff0c;算法得以在此基础上生动起来。 常用的数据结构包括哪些 &#xff0c; &#xff0c; &…

QA测试开发工程师面试题满分问答21: 单元测试、集成测试、系统测试的侧重点是什么?

单元测试、集成测试和系统测试是软件测试中的不同层次和阶段&#xff0c;每个阶段侧重于不同的测试目标和范围。以下是它们的侧重点的简要说明&#xff1a; 单元测试&#xff1a; 单元测试是针对软件中最小的可测试单元&#xff08;通常是函数、方法或模块&#xff09;进行的测…

版本控制系统-Git

目录 1. Git简介 2. 下载及安装 3.命令行操做 3.1全局设置 3.2初始化仓库 3.3提交代码 3.4查看提交历史 3.5推送代码 3.6拉取合并代码 3.7克隆仓库 3.8. 配置忽略文件 3.9. 凭据管理 4. GUI工具操作 4.1. 全局设置 4.2. 初始化仓库 4.3. 提交代码 输入提交日志…

Gone框架介绍3 - 使用gone命令,自动生成Priest函数

文章目录 1. 安装辅助工具: gone2. 创建一个名为gen-code的新项目3. 创建Goner4. 使用辅助工具5. 添加main函数 我在两年前实现了一个Golang的依赖注入框架&#xff0c;并且集成了gin、xorm、redis、cron、消息中间件等功能&#xff0c;自己觉得还挺好用的&#xff1b;之前一直…

Jenkins首次Build,配置Git,Maven,JDK,凭证管理

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudso…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快&#xff0c;人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求&#xff0c;市场上涌现出了众多桌面便签备忘录软件&#xff0c;它们不仅可以帮助我们记录待办事项&#xff0c;还能定时提醒我们完成任务。在这篇文章中&#xff0c;我将为大家…

宝子们,到我选Offer了

A. 腾讯IEG光子 游戏客户端 Base 深圳 优点&#xff1a; 1. Title可以&#xff0c;是IEG正经游戏工作室 2. 这可是鹅啊&#xff0c;可以吟唱《作废》歌 缺点&#xff1a; 1. 离得远 要租房 2. 5000HC 转正率懂得都懂 3. 可能会参与预研的东西 不会很快参与…

HaLo-NeRF:利用视觉和语言模型对场景的精准定位和细粒度语义理解

包含大量摄影师拍摄的照片的互联网图像集有望实现对大型旅游地标的数字探索。然而&#xff0c;先前的工作主要集中在几何重建和可视化上&#xff0c;忽略了语言在为导航和细粒度理解提供语义界面方面的关键作用。 项目&#xff1a;HaLo-NeRF: Learning Geometry-Guided Semant…

Ansible自动化运维工具主机清单配置

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月24日12点21分 Ansible主机清单文件用于定义要管理的主机及其相关信息。它是Ansible的核心配置文件之一&#xff0c;用于Ansible识别目标主机并与其建立连接。 …

win10安装DHCP服务--用于2台机器之间搭建简易网络来进入目标机器修改配置

前言&#xff1a; 客户多了&#xff0c;往往会出现各种突发情况。 比如一个客户现场没有DHCP&#xff0c;没有显示器&#xff0c;键盘。 你只有一台笔记本的情况下要配置目标机器的网络。要如何配置&#xff1f;&#xff1f; 这时候就可以使用这篇博客提供的方式了。 Windows…

分布式与一致性协议之CAP和Paxos算法(一)

CAP 理论 如何使用BASE理论 以InfluxDB系统中DATA节点的集群实现为例。DATA节点的核心功能是读和写&#xff0c;所以基本可用是指读和写的基本可用。我们可以通过分片和多副本实现读和写的基本可用。也就是说&#xff0c;将同一业务的数据先分片&#xff0c;再以多份副本的形…

STM32驱动SYN6288语音合成模块

STM32驱动SYN6288语音合成模块 简介功能特点通讯方式接线代码结果总结 简介 SYN6288通过异步串口(UART) 通讯方式&#xff0c;接收待合成的文本数据&#xff0c;从而实现文本到语音的转换SYN06188 语音芯片的优秀特点:最小SS0P28L 贴片封装、硬件接口简单、低功耗、音色清亮圆…

C++中auto关键字的用法详解

1.简介 auto作为一个C语言就存在的关键字&#xff0c;在C语言和C之间却有很大区别。 在C语言中auto修饰的变量&#xff0c;是具有自动存储器的局部变量&#xff0c;但因为局部变量默认类别默认是auto修饰导致一直没有人去使用它。 C11中&#xff0c;标准委员会赋予了auto全新…

Linux学习笔记:进程间的通信.共享内存shm

共享内存shm 什么是共享内存shm共享内存的特点关键函数ftokshmgetshmatshmdtshmctl 代码示例 什么是共享内存shm 进程间通信的前提:必须让不同的进程看到同一份资源,并且这个资源是OS提供的 而共享内存(Share memory)就是在内核共享内存区找一块物理内存空间,并允许多个进程共…

西瓜书学习——决策树形状、熵和决策树的本质

文章目录 决策树形状监督学习算法分类与回归 熵信息熵香农熵 (Shannon Entropy) - H(X)联合熵 (Joint Entropy) - H(X, Y)条件熵 (Conditional Entropy) - H(Y|X)互信息 (Mutual Information) - I(X; Y)相对熵 (Relative Entropy) / KL散度 (Kullback-Leibler Divergence) - DK…

学习CSS3,实现红色心形loading特效

试想一下&#xff0c;如果你的网站在加载过程中&#xff0c;loading图由一个老旧的菊花转动图片&#xff0c;变为一个红色的心形loading特效&#xff0c;那该有多炫酷啊。 目录 实现思路 初始化HTML部分 延迟动画是重点 设定动画效果 完整源代码 最后 实现思路 每个…

怎样批量将jpg图片转换成HEIC格式?jpg快速转换成HEIC图片

heic格式和jpg格式图片大家都很熟悉了。那么这两种图片格式的区别是什么&#xff1f;哪种格式图片更好一些&#xff1f; 一&#xff0c;区别&#xff1a;jpg和HEIC的区别 1&#xff0c;jpg格式有良好的压缩性能和良好的重建质量而被广泛应用于图像和视频处理中。 2&#xff…

HarmonyOS实战开发-RPC连接、如何实现前台选择商品和数目,后台计算总价的功能

介绍 本示例使用ohos.rpc 相关接口&#xff0c;实现了一个前台选择商品和数目&#xff0c;后台计算总价的功能&#xff0c;使用rpc进行前台和后台的通信。 效果预览 使用说明&#xff1a; 点击商品种类的空白方框&#xff0c;弹出商品选择列表&#xff0c;选择点击对应的商品…

常用工具网站

代码生成器&#xff1a; SQL转Java代码生成器 | 不求人导航SQL转Java代码生成器https://codegen.bqrdh.com/

面试题-Redis篇

什么是 Redis? Redis 是完全开源免费的&#xff0c;遵守 BSD 协议&#xff0c;是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a; Redis 支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时 …