Linux的SSH密钥认证快捷配置

本文适用:rhel5-9系列,同类系统(CentOS,AlmaLinux,RockyLinux等)、debian系(ubuntu)等也可参照
文档形成时期:2012-2024年
因系统版本不同,配置应略有差异,本文没有在细节上区分,但实践中发现均可配置成功

文章目录

  • Linux客户端密钥认证配置
    • 一键配置方式
    • 交互式生成方式
    • 查看生成的密钥对
  • Linux服务端密钥认证配置
    • 客户端登陆服务端
      • 无提示登陆示例
  • SSH双向密钥登陆

Linux客户端密钥认证配置

一键配置方式

配置和生成如下,可以一键拷贝到终端运行

# 修改加密码强度:
sed -i '/ServerKeyBits/c\ServerKeyBits 2048' /etc/ssh/sshd_config
service sshd reload # 或 systemctl reload sshd
# 配置修改:
# 修改/etc/ssh/ssh_config或拷贝一份儿到当前用户.ssh下
cp /etc/ssh/ssh_config ~/.ssh/config
sed -i '/HostbasedAuthentication/c\HostbasedAuthentication yes' ~/.ssh/config
sed -i '/ConnectTimeout/c\ConnectTimeout 7' ~/.ssh/config
sed -i '/IdentityFile \~\/\.ssh\/id_rsa/c\IdentityFile \~\/\.ssh\/id_rsa' ~/.ssh/config
# sed -i '/StrictHostKeyChecking/c\StrictHostKeyChecking no' ~/.ssh/config # 在某些全自动化场景下,不希望检测服务端公钥,便可配置该项
if ( ! grep -q "UserKnownHostsFile /dev/null" ~/.ssh/config ); then echo "UserKnownHostsFile /dev/null" >> ~/.ssh/config; fi 
# 参考:https://blog.csdn.net/yasaken/article/details/7348441
# 配置完成# 生成密钥和公钥
# -b 指定加密位数,默认也是2048;-N是指定空密码;-f是指定密钥生成的文件,不能使用~这个的主目录符号,不识别;
# -C 只是指定评论,在公钥的末尾能看到,改动评论不影响密钥使用;
if [ ! -f ~/.ssh/id_rsa ]; then ssh-keygen -b 2048 -t rsa -f "/root/.ssh/id_rsa" -N "" -C "root@`ip addr show dev eth0 | grep "inet" | awk -F ' ' '{print $2}' | cut -d'/' -f 1 | head -1 2> /dev/null`"; else echo "This machine already has this rsa, do nothing"; fi# 不判断,直接生成:
# ssh-keygen -b 2048 -t rsa -f "/root/.ssh/id_rsa" -N "" -C "root@localhost"

交互式生成方式

下面是交互式生成过程:
在SSH客户端生成公钥和私钥(不是在服务端)(生成的是用户密钥,有别于主机密钥)

ssh-keygen -t rsa

一路回车就行
Enter file in which to save the key (/root/.ssh/id_rsa):
回车,把key放到哪个位置及指定文件名,默认就行
Enter passphrase (empty for no passphrase):
给key加密,可设可不设,就是打开密钥和使用密钥的时候需要密码,如果设,必须4位以上,建议不要设
Enter same passphrase again:
在输入刚才的密码

查看生成的密钥对

ls ~/.ssh

id_rsa 密钥
id_rsa.pub 公钥

Linux服务端密钥认证配置

编辑 /etc/ssh/sshd_config 文件,打开密钥登录功能

sed -i '/#RSAAuthentication/c\RSAAuthentication yes' /etc/ssh/sshd_config
sed -i '/#PubkeyAuthentication/c\PubkeyAuthentication yes' /etc/ssh/sshd_config
sed -i '/#AuthorizedKeysFile/c\AuthorizedKeysFile      .ssh/authorized_keys' /etc/ssh/sshd_config
service sshd reload
# su - user # 如果是为普通用户生成,需要切换
mkdir ~/.ssh
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
service sshd reload

vi ~/.ssh/authorized_keys
#追加ssh客户端的公钥,注意是一个一行

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录(可选):
PermitRootLogin yes 允许ROOT

PasswordAuthentication yes
改为
PasswordAuthentication no
检查配置:
sshd -t
最后,重载 SSH 服务:
service sshd reload #rh6或更低版本
systemctl reload sshd #rh7+
直接执行,网络不会断掉的。

vi ~/.ssh/authorized_keys
#把客户端的公钥放到服务端的 ~/.ssh/authorized_keys (不是客户端的哟)
cat ~/.ssh/id_rsa.pub
#拷贝内容过去也可以(公钥没有换行,只能是一行哟,注意)
或这样下发到客户端:
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@1.2.3.4

客户端登陆服务端

客户端首次密钥方式登陆服务端,需要加入服务端的公钥到客户端的~/.ssh/known_hosts,这个过程一般是自动提示,你只需输入yes

然后该客户端登陆该服务端就可以不需要密码验证了,当然密码认证和密钥认证可以同时开启,然后由客户端的连接方式决定。

无提示登陆示例

ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=7 -o HostbasedAuthentication=yes -o IdentityFile=~/.ssh/id_rsa -p 22 root@remoteip "{ ifconfig; }"

SSH双向密钥登陆

如果把服务端和客户端角色换一下,再按以上操作步骤实施一遍,即可实现双向密钥认证登陆。

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

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

相关文章

Linux实用命令

文章目录 一.系统与设置命令1. Linux的用户与用户组2.当前用户的详细信息 id3.提高普通用户的权限sudo4.实时显示进程的信息 top5.查看进程信息ps6.杀死进程kill7.关机重启8.显示当前登陆系统的用户who9.校正服务器时间,时区 timedatectl10.清屏命令clear 二.目录管理1.ls列出目…

Atlassian版本选择趋势是上云还是本地部署?全面分析两个版本的特性

近日,龙智联合Atlassian举办的DevSecOps研讨会年终专场”趋势展望与实战探讨:如何打好DevOps基础、赋能创新”在上海圆满落幕。龙智Atlassian技术与顾问咨询团队,以及清晖、JamaSoftware、CloudBees等生态伙伴的嘉宾发表了主题演讲&#xff0…

flutter封装dio请求库,让我们做前端的同学可以轻松上手使用,仿照axios的使用封装

dio是一个非常强大的网络请求库,可以支持发送各种网络请求,就像axios一样灵活强大,但是官网没有做一个demo示例,所以前端同学使用起来还是有点费劲,所以就想在这里封装一下,方便前端同学使用。 官网地址&a…

uniapp开发安卓应用微信开放平台创建应用如何获取签名

微信开放平台创建应用时需要应用的签名 比如我们开发了一个应用叫 “滴滴拉屎” 包名:uni.DIDILASHI #mermaid-svg-BUKbltDr30J93dUs {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BUKbltDr30J93dUs .…

直播带货2024:洗牌、阵痛和暗流涌动

文 | 螳螂观察 作者 | 青月 一天前,大学生齐夏根本不会在直播间购买《额尔古纳河右岸》这种书籍。 她是喜欢看小说,但只钟爱悬疑无限流题材,至于《额尔古纳河右岸》这种讲述一个弱小民族顽强的抗争和优美的爱情的长篇小说,用齐…

设计模式原理与分析

一、设计模式原理与分析 1、概念 设计模式是在软件开发过程中总结得出的一些可重用的解决方案,它能解决一些实际的问题。一些常见的模式,比如工厂模式、单例模式等等。 封装、继承、多态只是类的三大特性,在程序设计时并不是说使用到了这三个…

读书笔记--微服务架构

微服务架构 服务网关 客户端与微服务直接通信 GateWay:API 网关是一个服务器,是系统的单入口点。它类似于面向对象设计模式中的门面(Facade)模式。API 网关封装了内部系统架构,并针对每个客户端提供一个定制 API。它…

vue上传文件加进度条,fake-progress一起使用

el-upload上传过程中加进度条,进度条el-progress配合fake-progress一起使用,效果如下: 安装 npm install fake-progress 在用到的文件里面引用 import Fakeprogress from "fake-progress"; 这个进度条主要是假的进度条&#xff…

轻量级图床Imagewheel本地部署并结合内网穿透实现远程访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

springIoc依赖注入循环依赖三级缓存

springIoc的理解,原理和实现 控制反转: 理论思想,原来的对象是由使用者来进行控制,有了spring之后,可以把整个对象交给spring来帮我们进行管理 依赖注入DI: 依赖注入,把对应的属性的值注入到…

全面解读数据安全法规

数据安全,可以说是近些年的热点,特别是随着大数据、人工智能等信息安全技术的快速发展,数据安全和隐私保护形势日益严峻,网络边界被打破,数据安全问题与日俱增。各国也非常重视数据安全建设,如下图展示的全…

js join方法的使用

JavaScript的join()方法是数组对象的方法之一,用于将数组中的所有元素连接成一个字符串。它可以接受一个可选的参数作为分隔符,用于在每个元素之间进行分隔。 以下是join()方法的基本语法: var newString array.join(separator) 在上述方…

设计模式之避免共享的设计模式 Thread-Specific Storage 模式

系列文章目录 设计模式之避免共享的设计模式Immutability(不变性)模式 设计模式之并发特定场景下的设计模式 Two-phase Termination(两阶段终止)模式 设计模式之避免共享的设计模式Copy-on-Write模式 提示:写完文章后…

Android Matrix (三)矩阵组合和应用变换

在 Android 开发中,Matrix 类不仅提供了 mapPoints 方法来变换点坐标,还提供了多种其他用法,使其成为处理图像和视图变换的强大工具。以下是 Matrix 类的一些关键用法: 1. 变换方法 setTranslate(float dx, float dy): 设置矩阵…

Android开发基础(二)

Android开发基础(二) 上篇主要描述了Android系统架构,代码是通过Java表示的; 本篇将从介绍Android组件去理解Android开发,代码将对Java和Kotlin进行对比。 Android组件 Android应用程序由一些零散的有联系的组件组成…

黑洞数(C语言)

黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。 任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后…

element input组件自动失去焦点问题解决

最近在 Vue3 ElementPlus 中,使用 el-input 组件时,如果设置了 v-model,那么在每次改变内容后后,input 会自动失去焦点,这样会导致用户无法输入多个字符。 一、问题原因 如上图所示,配置项的 Name 和 Cod…

算法训练营Day36

#Java #动态规划 开源学习资料 Feeling and experiences: 动态规划:01背包理论基础:卡码网题目链接 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料&#xf…

信息收集之子域名收集

渗透测试常见手法和思维 信息收集 简述 信息收集对于渗透测试前期来说是非常重要的,因为只有我们掌握了目标网站或目标主机足够多的信息之后,我们才能更好地对其进行漏洞检测。正所谓,知己知彼百战百胜! 信息收集的方式可以分…

linux下can调试工具canutils编译安装

命令安装只需要 sudo apt-get install canutils 一、下载源码 下载canutils和libsocketcan libsocketcan地址:https://public.pengutronix.de/software/libsocketcan/libsocketcan-0.0.11.tar.bz2 #0.0.11版本 canutils地址:https://public.pengutronix…