Linux远程登陆协议ssh

目录

一、SSH服务

1. ssh基础

2. 原理

3. 服务端配置 

3.1 常用配置项

3.2 具体操作

 3.2.1 修改默认端口号

3.2.2 禁止root用户登录  

3.2.3  白名单列表

3.2.4 黑名单列表 

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

3.2.6 免交互式登录


一、SSH服务

1. ssh基础

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

ssh协议优点:

  • 同时该协议具有加密输出,相较于telnet、FTP等明文传输方式更加安全
  • 数据压缩的优点

软件包及相关路径:

  • 服务名称:sshd
  • 服务端主程序:/usr/sbin/sshd  
  • 服务端配置文件:/etc/ssh/sshd_config 
  • 客户端配置文件:/etc/ssh/ssh_config
[root@localhost ~]# cd /etc/ssh
[root@localhost ssh]# ls
moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub
ssh_config  ssh_host_ecdsa_key  ssh_host_ed25519_key    ssh_host_rsa_key
#ssh_host_ecdsa_key.pub 通过ecdsa算法加密的公钥
#ssh_host_ecdsa_key     通过ecdsa算法加密的私钥

2. 原理

① 客户端发起链接请求

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

③ 客户端生成密钥对

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

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

⑥ 服务端用解密后的值Res异或会话ID,计算出客户端的公钥,服务端得到客户端公钥

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

对称加密

(1)概念

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

(2)特点

加密解密传输速度快,但是安全性较低,加密和解密使用同一个密钥

非对称加密

(1)概念

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

(2)特点

密解密传输速度慢,但是安全性较高,加密和解密需要使用不同的密钥

如何确认连接的服务端是不是我们想要访问的?

提前记录服务端的公钥,下次连接时核对获得的公钥是否与需要的一致。

登录方法:

客户端:
[root@localhost ~]# ssh root@192.168.190.101
#默认使用22端口 root(登录对方的用户)加IP地址,首次登录会询问,并要求输入密码
The authenticity of host '192.168.190.101 (192.168.190.101)' can't be established.
ECDSA key fingerprint is SHA256:aIqKteFz37bh8tOF7A07YElsVqfHgBSbxwkKXK9dfks.
ECDSA key fingerprint is MD5:9c:5a:7f:ec:d9:0c:2a:b2:9d:9e:03:77:f3:87:36:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.190.101' (ECDSA) to the list of known hosts.
root@192.168.190.101's password: 
Last login: Sat Jan 13 14:26:09 2024 from 192.168.190.1
[root@localhost ~]# exit
登出
Connection to 192.168.190.101 closed.
[root@localhost .ssh]# cd
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls
known_hosts
[root@localhost .ssh]# cat known_hosts
192.168.190.101 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAGrNfplQ1uWAa7tuFe14mzHMtaAb6zKFG0phfTMPqJixfIWgoaIh0hHp8gvumMufYzF7JICVYDWTkFy3VIYVUU=
#获得的服务端公钥服务端:
[root@localhost ssh]# cat ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAGrNfplQ1uWAa7tuFe14mzHMtaAb6zKFG0phfTMPqJixfIWgoaIh0hHp8gvumMufYzF7JICVYDWTkFy3VIYVUU= 
#服务端公钥

ssh选项:

ssh -l [远程主机用户名] [远程服务器主机名或IP地址] -p port
-l:-l 选项,指定登录名称。

[root@localhost ~]# ssh -l root 192.168.190.101
root@192.168.190.101's password: 
Last login: Sat Jan 13 14:34:21 2024 from 192.168.190.100

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

服务端:
[root@localhost ~]# cd /etc/ssh
[root@localhost ssh]# vim sshd_config   #修改服务端配置
17 Port 888                             #指定登录端口号888
[root@localhost ssh]# systemctl stop firewalld.service
[root@localhost ssh]# setenforce 0     
[root@localhost ssh]# systemctl restart sshd客户端
[root@localhost ~]# ssh 192.168.190.101 -p 888
root@192.168.190.101's password: 
Last login: Sat Jan 13 15:32:24 2024 from 192.168.190.101
[root@localhost ~]# w | grep 192.168.190.100
root     pts/1    192.168.190.100  15:21    5.00s  0.12s  0.04s ssh 192.168.190.101 -p 888

-t:跳板,当服务端无法直接访问时可以通过访问其他设备转接服务端

服务端:192.168.190.101
[root@localhost ssh]# iptables -A INPUT -s 192.168.190.100 -j REJECT
#模拟防火墙,丢弃来自192.168.190.100所有的流量包客户端:192.168.190.100
[root@localhost ~]# ping 192.168.190.101
PING 192.168.190.101 (192.168.190.101) 56(84) bytes of data.
From 192.168.190.101 icmp_seq=1 Destination Port Unreachable
From 192.168.190.101 icmp_seq=2 Destination Port Unreachable   #此时客户端无法ping通服务端
[root@localhost ~]# ssh 192.168.190.101
ssh: connect to host 192.168.190.101 port 22: Connection refused  #拒绝访问
[root@localhost ~]# ssh -t 192.168.190.102 ssh -t 192.168.190.101
#通过102跳转到101
The authenticity of host '192.168.190.102 (192.168.190.102)' can't be established.
ECDSA key fingerprint is SHA256:pEW/xy589bfYuWl9zTchcXoKlgB/IILjpmhWvsDJsPU.
ECDSA key fingerprint is MD5:17:bb:91:f2:97:b0:58:73:ae:b2:d8:1b:56:24:83:c0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.190.102' (ECDSA) to the list of known hosts.
root@192.168.190.102's password: 
The authenticity of host '192.168.190.101 (192.168.190.101)' can't be established.
ECDSA key fingerprint is SHA256:aIqKteFz37bh8tOF7A07YElsVqfHgBSbxwkKXK9dfks.
ECDSA key fingerprint is MD5:9c:5a:7f:ec:d9:0c:2a:b2:9d:9e:03:77:f3:87:36:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.190.101' (ECDSA) to the list of known hosts.
root@192.168.190.101's password: 
Last login: Sat Jan 13 22:50:53 2024 from 192.168.190.1
[root@localhost ~]# 

3. 服务端配置 

3.1 常用配置项

[root@localhost ~]# vim /etc/ssh/sshd_config  #服务端配置文件
17 #Port 22                 #生产建议修改 
19 #ListenAddress 0.0.0.0   #监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址
37 #LoginGraceTime 2m       #用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒
38 #PermitRootLogin yes     #不允许root远程ssh登录,改为no即可
39 #StrictModes yes         #检查.ssh/文件的所有者,权限等
40 #MaxAuthTries 6          #用来设置最大失败尝试登陆次数为6
41 #MaxSessions 10          #同一个连接最大会话
43 #PubkeyAuthentication yes  #基于key验证
64 #PermitEmptyPasswords no #通过认证的秘钥来登陆
65 PasswordAuthentication yes #基于用户名和密码连接
115 #UseDNS no              #禁用反向解析,内网改为no

3.2 具体操作

 3.2.1 修改默认端口号
[root@localhost ~]# vim /etc/ssh/sshd_config
17 Port 新端口号
3.2.2 禁止root用户登录  
[root@localhost ~]# vim /etc/ssh/sshd_config
38 PermitRootLogin no

注意虽然阻止了root 但是普通用户可以使用su 

[C:\~]$ ssh fql@192.168.190.100Connecting to 192.168.190.100:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'./usr/bin/xauth:  file /home/fql/.Xauthority does not exist
[fql@localhost ~]$ su root
密码:
[root@localhost fql]# 

修改pam认证模块,只允许wheel组用户可以使用su

[root@localhost ~]# vim /etc/pam.d/su
6 #auth           required        pam_wheel.so use_uid
#开启第6行,默认注释
3.2.3  白名单列表
服务端:
[root@localhost ~]# vim /etc/ssh/sshd_config
140 AllowUsers fql@192.168.190.101  lisi
#只允许192.168.190.101访问服务端的fql用户;允许所有人访问服务端的lisi用户
[root@localhost ~]# systemctl restart sshd客户端:
[root@localhost ~]# ssh fql@192.168.190.100
The authenticity of host '192.168.190.100 (192.168.190.100)' can't be established.
ECDSA key fingerprint is SHA256:6+8qeJTs9OwWCvFNtomXsQvrfb+no8F3moR0oliq7QU.
ECDSA key fingerprint is MD5:3b:d2:42:d9:c3:03:ba:ac:18:2c:e0:03:a3:c7:bd:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.190.100' (ECDSA) to the list of known hosts.
fql@192.168.190.100's password: 
[fql@localhost ~]$ exit                            #可以访问fql用户
登出
Connection to 192.168.190.100 closed.
[root@localhost ~]# ssh root@192.168.190.100
root@192.168.190.100's password: 
Permission denied, please try again.               #被拒绝访问
[root@localhost ~]# ssh lisi@192.168.190.100       #可以访问lisi用户
lisi@192.168.190.100's password: 
[lisi@localhost ~]$ 
3.2.4 黑名单列表 
服务端:
[root@localhost ~]# vim /etc/ssh/sshd_config
141 DenyUsers  lisi                               #拒绝所有人访问lisi用户
[root@localhost ~]# systemctl restart sshd客户端:
[root@localhost ~]# ssh lisi@192.168.190.100
lisi@192.168.190.100's password: 
Permission denied, please try again.

注:如果同一个条件黑白名单都存在,执行黑名单条件

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

生成rsa算法密钥:

[root@localhost ~]# ssh-keygen              #不指定加密算法直接回车
Generating public/private rsa key pair.     #默认使用ras算法的加密方式
Enter file in which to save the key (/root/.ssh/id_rsa):  #文件默认路径
Enter passphrase (empty for no passphrase): #给这个密钥设置密码(隐藏)
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DA+e1rp8+dXI4HlV1Qkt48ESsiB1/KpYvxelRKKh6QI root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|     ..o.o .o.o +|
|      ..oooo = oo|
|      = o.+ o + .|
| E   + O   o o . |
|  . . + S + o .  |
|   . o o o * +   |
|    . + o.o * .  |
|     o oo. +     |
|      o. o+      |
+----[SHA256]-----+
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub                     #生成了两个rsa算法的密钥
[root@localhost .ssh]# 

传输密钥:

192.168.190.100:
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@localhost .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.190.101
#将公钥传给192.168.190.101
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.190.101's password: 
Permission denied, please try again.
root@192.168.190.101's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh '192.168.190.101'"
and check to make sure that only the key(s) you wanted were added.192.168.190.101:
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls
authorized_keys  known_hosts         #已收到公钥

验证登录:

[root@localhost .ssh]# ssh 192.168.190.101
Enter passphrase for key '/root/.ssh/id_rsa':           #输入密钥密码
Last login: Sun Jan 14 22:00:14 2024 from 192.168.190.1

为了保证安全,可以只使用密钥文件验证 :

[root@localhost .ssh]# vim /etc/ssh/sshd_config
43 PubkeyAuthentication yes
65 PasswordAuthentication no
[root@localhost .ssh]# systemctl restart sshd
3.2.6 免交互式登录
[root@localhost .ssh]# ssh-agent bash    #把sh-agent交给进程管理
[root@localhost .ssh]# ssh-add           #把密码交给sh-agent   
Enter passphrase for /root/.ssh/id_rsa:  #输入密钥文件密码
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@localhost .ssh]# ssh 192.168.190.101          #无需密码即可登录,重启后失效
Last login: Sun Jan 14 22:06:03 2024 from 192.168.190.1

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

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

相关文章

VQE音频处理流程

VQE 上行VQE,主要针对MIC采集部分的音频增强 下行VQE,主要针对SPK播放部分的音频增强 附关键词解释 RES RES 模块为重采样(Resampler)模块。当AI上行或AO下行通路中开启VQE 各功能 模块时,在处理前后各存在一次重采样…

c语言实现b树

概述:B 树(B-tree)是一种自平衡的搜索树数据结构,广泛应用于数据库和文件系统等领域。它的设计旨在提供一种高效的插入、删除和查找操作,同时保持树的平衡,确保各个节点的深度相差不大。 B 树的特点包括&a…

怎么使用好爬虫IP代理?爬虫代理IP有哪些使用技巧?

在互联网时代,爬虫技术被广泛应用于数据采集和处理。然而,在使用爬虫技术的过程中,经常会遇到IP被封禁的问题,这给数据采集工作带来了很大的困扰。因此,使用爬虫IP代理成为了解决这个问题的有效方法。本文将介绍如何使…

Java中泛型和Object类型 初级进阶教程(一)

在学习的过程中&#xff0c;常常看到某个类或者接口等中使用 List<T>, Test<T>&#xff0c;其中<T>的作用是什么呢&#xff1f; 1 在类中使用泛型 public class Box<T> {private T content;public void setContent(T content) {this.content conten…

深度学习与药物发现在健康衰老中的应用

深度学习是一种模拟人脑神经网络处理信息的方法&#xff0c;其已在语音、图像、自然语言等处理中发挥了巨大作用。但在健康衰老这一领域的应用中&#xff0c;它面临着很多挑战。 首先&#xff0c;健康衰老是一个复杂的生物学过程&#xff0c;涉及众多因素&#xff0c;如基因、…

Linux———top命令详解(狠狠爱住)

top 命令 是一个常用的系统性能监测工具&#xff0c;它可以实时显示系统中各个进程的状态和资源占用情况。 启动 top 命令&#xff1a; 直接在终端输入 top 命令即可启动。默认情况下&#xff0c;top 显示的是按照 CPU 使用率排序的进程列表。 功能键说明&#xff1a; h&…

【redis基础1】基础数据类型详解和应用案例

博客计划 &#xff0c;我们从redis开始&#xff0c;主要是因为这一块内容的重要性不亚于数据库&#xff0c;但是很多人往往对redis的问题感到陌生&#xff0c;所以我们先来研究一下。 本篇&#xff0c;我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述 以mysql为…

文章测试测试

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

xtu oj 1340 wave

题目描述 一个n列的网格&#xff0c;从(0,0)网格点出发&#xff0c;波形存在平波(从(x,y)到(x1,y))&#xff0c;上升波(从(x,y)到(x1,y1))&#xff0c;下降波(从(x,y)到(x1,y−1))三种波形&#xff0c;请问从(0,0)出发&#xff0c;最终到达(n,0)的不同波形有多少种&#xff1f…

C++PythonC# 三语言OpenCV从零开发(1):环境配置

文章目录 前言课程选择环境配置PythonC#COpenCV官网下载新建C项目测试运行Csharp版Python版 gitee仓库总结 前言 由于老王我想转机器视觉方向的上位机行业&#xff0c;我就打算开始从零学OpenCV。但是目前OpenCV有两个官方语言&#xff0c;C和Pyhont。C# 有大佬做了对应的Open…

快速幂板子

快速幂是快速算 a 的 c 次幂 原理&#xff1a; 我们用分治思想是比一个一个乘快的 即比如我们求a的8次方 &#xff1a;a1*a1 a2 ,那么我们直接a2*a2 a4&#xff0c;a4*a4 a8 参数就是几次幂。返回值是对应参数的幂 &#xff08;这里对p取余了&#xff09;(一般也把a当参数…

vue 自定义网页图标 favicon.ico 和 网页标题

效果预览 1. 添加配置 vue.config.js 在 module.exports { 内添加 // 自定义网页图标pwa: {iconPaths: {favicon32: "./favicon.ico",favicon16: "./favicon.ico",appleTouchIcon: "./favicon.ico",maskIcon: "./favicon.ico",msTil…

Java进阶第一天

Java进阶第一天 文章目录 Java进阶第一天双列集合特点Map的常见APIMap集合的遍历方式 双列集合 特点 双列集合一次需要存一对数据,分别是键和值(键值对)键不能重复,值可以重复键和值一一对应 Map的常见API Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的…

memory泄露分析方法(java篇)

#memory泄露主要分为java和native 2种&#xff0c;本文主要介绍java# 测试每天从monkey中筛选出内存超标的app&#xff0c;提单流转到我 首先&#xff0c;辨别内存泄露类型&#xff08;java&#xff0c;还是native&#xff09; 从采到的dumpsys_meminfo_pid看java heap&…

【ROS2】使用C++实现简单的发布订阅方

1 构建自定义数据类型 1、自定义消息类型Student 1.1 创建base_interfaces_demo包 1.2 创建Student.msg文件 string name int32 age float64 height 1.2 在cmakeLists.txt中增加如下语句 #增加自定义消息类型的依赖 find_package(rosidl_default_generators REQUIRED) # 为…

C++ namespace高级用法

高级用法 C++中的命名空间(namespace)是一种用于组织代码的机制,它可以帮助避免命名冲突,并使代码更加清晰和易于维护。以下是C++命名空间的一些高级用法: 嵌套命名空间:命名空间可以嵌套在其他命名空间中,形成一个层次结构。嵌套命名空间可以进一步细化命名空间,使其更…

k8s operator从0到1实践

文章目录 环境准备一个k8s集群开发工具包mac安装 实践初始化operator项目核心逻辑编写测试验证验证 部署 参考 环境准备 一个k8s集群 推荐使用docker-desktop&#xff0c;本地单机集群 开发工具包 这里推荐使用脚手架工具kubebuilder 使用脚手架工具&#xff0c;能生成项目…

Java基础-常量,变量,数据类型-笔记

1.关键字分类 用于定义数据类型的关键字&#xff1a;class&#xff0c;interface&#xff0c;enum&#xff0c;byte&#xff0c;short&#xff0c;int&#xff0c;long&#xff0c;float&#xff0c;double&#xff0c;char&#xff0c;boolean,void。 用于定义流程控制的关键字…

「微服务」企业微服务架构

首先&#xff0c;来自Darren的消息是&#xff0c;微服务架构并不是构建大规模企业应用程序的新方式。Netflix和亚马逊等公司已经实施了微服务架构&#xff0c;在过去几年中提供了成功的产品。 但是微服务架构适合您的组织吗&#xff1f;答案不是简单的是或否&#xff0c;但我会…

【Vue样式绑定详细介绍】

Vue样式绑定详细介绍 1. 样式绑定2. 字符串语法3. 对象语法4. 数组语法4. 自动添加前缀5. 多重值 (2.x的.9版本或3.x) 1. 样式绑定 在Vue中&#xff0c;样式绑定是通过 v-bind:style 或简写 :style 来实现的&#xff0c;它允许你将多种样式动态地绑定到元素上&#xff0c;样式…