【Linux网络】ssh服务与配置,实现安全的密钥对免密登录

目录

一、SSH基础

1、什么是ssh服务器

2、对比一下ssh协议与telnet协议

3、常见的底层为ssh协议的软件:

4、拓展

二、SSH软件学习

1、ssh服务软件学习 

2、sshd公钥传输的原理:

3、ssh命令学习:

4、学习解读sshd服务配置文件:

三、ssh服务的应用

1、使用密钥对免密码登录

第一步:在客户端自己生成一对密钥(使用命令ssh-keygen)

第二步:将公钥文件导入给服务器,检查自己会产生一个known_hosts文件,服务器对应用户的家目录的.ssh目录下也会产生一个authorized_keys文件。

第三步:验证是否免密:(这个是单向的,如果需要服务器也能连接客户端,那么还需要在服务器同样做设置)

 2、黑白名单设置

黑白名单的语法:

第一种:白名单

第二种: 黑名单


一、SSH基础

1、什么是ssh服务器

ssh是一种安全双通道协议,主要用来实现远程登录、数据传输等;ssh协议对通信双方的数据传输进行加密处理,其中包括用户登录时输入的用户口令,ssh为建立在应用层和传输层基础上的安全协议。

2、对比一下ssh协议与telnet协议

telnet协议:是明文的,端口号是tcp的23端口;

ssh协议:数据传输是加密的,可以防止信息泄露;数据传输是压缩的,可以提高传输的速度;端口是tcp的22端口;

SSH(Secure Shell)目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。

3、常见的底层为ssh协议的软件:

Linux客户端: ssh, scp, sftp,sloginWindows客户端:xshell, MobaXterm,putty, securecrtOpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。执行"systemctl start sshd"命令即可启动sshd 服务

4、拓展

Windows上自带的远程连接工具是mstsc,是使用的tcp的3389端口,使用的RDP协议

 

二、SSH软件学习

1、ssh服务软件学习 

软件名:openssh(在centos7中为openssh-server)
服务名称:sshd
服务端主程序:/usr/sbin/sshd  
服务端配置文件:/etc/ssh/sshd_config ##ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务(文件传输功能)
客户端配置文件:/etc/ssh/ssh_config

2、sshd公钥传输的原理:

  • 客户端发起连接请求

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

  • 客户端生成密钥对

  • 客户端用自己的公钥异或会话ID(异或是算法,有很多种),计算出一个值Res,并用服务端的公钥加密

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

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

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

原理是这样,但是在实际操作中客户端把服务器的公钥记录在了~/.ssh/known_hosts文件中

拓展:

思考我们登录时怎么确认是不是我需要连接的服务器?(有个前提是我能碰的着服务器)

首先在客户端连接服务器:

服务器连接自己试试:

3、ssh命令学习:

ssh命令的语法:ssh [选项] 用户名@服务器ip地址或域名
选项:
-p 端口号:不加默认是22号端口,如果是端口被修改了,需要指定端口号;
-l 用户名:这个和“用户名@”效果一样;
-t 跳板机服务器ip地址:比如需要访问外网的时候,需要先过内外网服务器等等;
-o 配置文件参数变量值:比如ssh 192.168.20.10 -o StrictHostKeyChecking=no (允许免密登录)ssh 还能直接跟上命令
如:
ssh 192.168.91.101 hostname (显示远程服务器的主机名)

4、学习解读sshd服务配置文件:

[root@localhost /]#vim /etc/ssh/sshd_config 17 #Port 22  ##这是sshd服务监听的端口,为了安全起见,建议更改默认端口为一个五位数以上的端口号18 #AddressFamily any19 #ListenAddress 0.0.0.0 ##可以改为自己的自己的ip地址20 #ListenAddress ::##用来设置sshd服务器绑定的IP地址32 SyslogFacility AUTHPRIV  33 #LogLevel INFO##当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,sshd 服务日志存放在:/var/log/secure。##可以做日志分离优化##LogLevel用来设定sshd日志消息的级别,与上面记录的等级息息相关35 # Authentication:##限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒37 #LoginGraceTime 2m##LoginGraceTime用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为妙38 #PermitRootLogin yes##PermitRootLogin用来设置能不能以root身份ssh登录,40 #MaxAuthTries 6##用来设置最大失败尝试登陆次数为641 #MaxSessions 10##设置同一个连接最大会话43 #PubkeyAuthentication yes##基于key验证(生产中需要打开)63 #PasswordAuthentication yes64 #PermitEmptyPasswords no  ##是否允许空密码登录,no表示不允许,需要密码!!##密码验证建议还是需要的!可以通过认证的秘钥来登陆,来减少密码交互。65 PasswordAuthentication yes##基于用户名和密码连接,默认为yes96 UsePAM yes##设置是否通过PAM验证,需要的98 #AllowAgentForwarding yes  ##允许代理99 #AllowTcpForwarding yes  ##允许tcp那个代理
100 #GatewayPorts no  
##设置是否允许远程客户端使用本地主机的端口转发功能,出于安全考虑,建议禁止115 #UseDNS no
##UseDNS是否使用dns反向解析,建议关闭,内网改为no可以提高速度这是可以添加的选项:
#AllowUsers<用户名1> <用户名2> <用户名3> ...
##指定允许通过远程访问的用户,多个用户以空格隔开
比如:AllowUsers zhangsan@192.168.91.101  lisi
##默认拒绝所有
##允许所有的主机访问我的lisi用户
##只允许192.168.91.101上的所有用户访问本机的zhangsan用户#AllowGroups<组名1> <组名2> <组名3> ...
##指定允许通过远程访问的组,多个组以空格隔开。当多个用户需要通过ssh登录系统时,可将所有用户加入一个组中。#DenyUsers<用户名1> <用户名2> <用户名3> ...
##指定禁止通过远程访问的用户,多个用户以空格隔开
举例:DenyUsers  liwu
#拒绝liwu被访问#DenyGroups<组名1> <组名2> <组名3> ...
##指定禁止通过远程访问的组,多个组以空格隔开。

三、ssh服务的应用

1、使用密钥对免密码登录

第一步:在客户端自己生成一对密钥(使用命令ssh-keygen)

##使用命令生成一对密钥
[root@localhost .ssh]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ##默认放在用户的家目录下的~/.ssh/下
Enter passphrase (empty for no passphrase): ##对密钥文件加密,密码至少5个字符
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:VqCGTmM6KO1NlBm1NNuCUZYE7ZXsCrZedcKdDaS4kFQ root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|    =BEo.o.      |
|   . @oB+o.      |
|    %.B+o..+     |
| o *o+.o=.+ .    |
|o +.oo.oSo       |
|.. +. o.         |
|  ....           |
|    .            |
|                 |
+----[SHA256]-----+
##验证密钥对成功创建
[root@localhost .ssh]#ls
id_rsa  id_rsa.pub

第二步:将公钥文件导入给服务器,检查自己会产生一个known_hosts文件,服务器对应用户的家目录的.ssh目录下也会产生一个authorized_keys文件。

第三步:验证是否免密:(这个是单向的,如果需要服务器也能连接客户端,那么还需要在服务器同样做设置)

 2、黑白名单设置

黑白名单的语法:

#AllowUsers<用户名1> <用户名2> <用户名3> ...
##指定允许通过远程访问的用户,多个用户以空格隔开
比如:AllowUsers zhangsan@192.168.91.101  lisi
##默认拒绝所有
##允许所有的主机访问我的lisi用户
##只允许192.168.91.101上的所有用户访问本机的zhangsan用户#AllowGroups<组名1> <组名2> <组名3> ...
##指定允许通过远程访问的组,多个组以空格隔开。当多个用户需要通过ssh登录系统时,可将所有用户加入一个组中。#DenyUsers<用户名1> <用户名2> <用户名3> ...
##指定禁止通过远程访问的用户,多个用户以空格隔开
举例:DenyUsers  liwu
#拒绝liwu被访问#DenyGroups<组名1> <组名2> <组名3> ...
##指定禁止通过远程访问的组,多个组以空格隔开。

第一种:白名单

[root@localhost ssh]#vim /etc/ssh/sshd_config
#手动添加
AllowUsers zhangsan@192.168.20.10
##表示只允许192.168.20.10主机上的任意用户能够连接zhangsan
##并且默认拒绝所有

第二种: 黑名单

##服务器上添加黑名单
[root@localhost .ssh]#vim /etc/ssh/sshd_config 2 DenyUsers xueyin@192.168.20.10

拓展:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!报错

翻译为:提醒你远程主机的身份已经修改了;

系统之前连接过192.168.20.10,记录了它的公钥,现在换了一台主机ip也是这个,但是公钥与缓存不一致,所以ssh好心提醒一下;

解决思路:根据生产环境需求,如果是安全的,那么删掉本地的密钥缓存(删除~/.ssh/known_hosts文件中的对应192.168.20.10的公钥)。

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

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

相关文章

Python 爬虫之scrapy 库

文章目录 总的介绍相关模块 总的介绍 Scrapy是一个用于爬取网站数据的开源Python框架。它提供了一套强大而灵活的工具&#xff0c;用于从网站上提取所需的数据。Scrapy是基于Twisted异步网络库构建的&#xff0c;因此可以高效地处理大量的并发请求。以下是Scrapy的一些主要特点…

react类式组件的生命周期和useEffect实现函数组件生命周期

概念 生命周期是一个组件丛创建,渲染,更新,卸载的过程,无论是vue还是react都具有这个设计概念,也是开发者必须熟练运用的,特别是业务开发,不同的生命周期做不同的事是很重要的. ....多说两句心得,本人是先接触vue的,无论是vue2还是vue3的生命周期,在理解和学习上都会比react更…

【Python3】【力扣题】263. 丑数

【力扣题】题目描述&#xff1a; 此题&#xff1a;正整数n&#xff0c;能被2或3或5整除&#xff0c;且不断除以2或3或5最终的数是1。 【Python3】代码&#xff1a; 1、解题思路&#xff1a;递归。 知识点&#xff1a;递归&#xff1a;函数中调用函数自身&#xff08;必须有退…

Java实现身份证号校验,最后一位校验码校验

中国居民身份证号码编码规则 第一、二位表示省&#xff08;自治区、直辖市、特别行政区&#xff09;。 第三、四位表示市&#xff08;地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码&#xff09;。其中&#xff0c;01-20&#xff0c;51-70表示省直辖市&#xff1b;21-5…

ChatGPT只算L1阶段,谷歌提出AGI完整路线图

按照谷歌这个标准来看&#xff0c;大多数已有AI产品其实都分别进入了不同的AGI阶段&#xff0c;但只仅限于在技能水平上——要谈及通用性&#xff0c;目前只有ChatGPT等模型完全合格。 AGI应该如何发展、最终呈什么样子&#xff1f; 现在&#xff0c;业内第一个标准率先发布&a…

智能巡检软件哪个好?中小企业如何提升工作效率与质量?

在当今数字化、智能化的时代&#xff0c;智能巡检软件作为一种高效的工具&#xff0c;已经在各行各业得到了广泛的应用。它利用物联网、大数据、人工智能等技术&#xff0c;为巡检工作提供了全面的解决方案&#xff0c;帮助企业实现数据化、智能化管理&#xff0c;提高工作效率…

SPI协议详解

SPI协议详解 文章目录 SPI协议详解前言一、SPI是什么&#xff1f;二、通信原理SPI 通信的 4 种工作模式 总结 前言 好久没写这种协议了&#xff0c;最近正好需要用到&#xff0c;便详细的复习一下。 一、SPI是什么&#xff1f; SPI是串行外设接口&#xff08;Serial Periphe…

通过Workstation工具制作CentOS8虚拟机模板

通过Workstation工具制作CentOS8虚拟机模板 1. 需求说明2. 安装模板虚拟机3. 配置模板虚拟机 1. 需求说明 说明&#xff1a;在做集群实验过程中&#xff0c;需要创建多台虚拟机&#xff0c;如果逐台安装虚拟机&#xff0c;很消耗时间&#xff0c;所以最简洁的办法就是通过模板克…

数据结构 | 栈的实现

数据结构 | 栈的实现 文章目录 数据结构 | 栈的实现栈的概念及结构栈的实现 Stack.h初始化栈入栈出栈获取栈顶元素获取栈中有效元素个数检测栈是否为空销毁栈 Stack.c 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。…

【Python】【应用】Python应用之一行命令搭建http、ftp服务器

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Python应用&…

Pytorch教程(代码逐行解释)

0、配准环境教程 1、开始导入相应的包 import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets from torchvision.transforms import ToTensortorch是pytorch的简写 torch.utils.data import DataLoader 是用于读取数…

数据结构:反射

基本概念 反射中的四个类 Class类 Java文件在被编译之后&#xff0c;生成了.class文件&#xff0c;JVM此时解读.class文件&#xff0c;将其解析为java.lang.Class 对象&#xff0c;在程序运行时每个java文件就最终变成了Class类对象的一个实例。通过反射机制应用这个 实例就…