Linux的SSH基于公私钥验证的方式登录

2024-02-07 15:38

本文主要是介绍Linux的SSH基于公私钥验证的方式登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

SSH是Linux下用于建立安全连接的一种技术,通过一对密钥对(包含公钥和私钥),通过签名验签方式校验,完成身份验证过程。详细原理请查看文章后面的参考文档,那位大佬写的很清晰,这篇文章主要是有一些基础,以及个人理解。

基础
  • 相关文件介绍
    如下图所示用户的Home目录下会有一个名为.ssh的目录,这里存放了指定用户的SSH相关文件,例如用户为root,如下所示。
    在这里插入图片描述

authorized_keys:本机器的该用户例如root)授权允许连接的客户端机器(即要允许登录连接本机的机器),例如本机器为A,要连接A的机器是B,B需要在A机器的authorized_keys里,否则会要求输入用户名和密码进行授权,才可以直接通过SSH建立连接。主要目的就是防止公钥泄漏了,别人在其他机器使用这个公钥来登录,这时候它不在这个列表里,那么就会直接拒绝,提示需要密码登录验证。
id_rsa:本机器的该用户(例如root)的私钥
id_rsa.pub:本机器的该用户(例如root)的公钥,一般提供给需要SSH连接本机器的客户端机器,客户端机器保存到对方的authorized_keys文件里,下次就用公钥直接SSH连接上了,不需要密码了。
known_hosts:本机器的该用户(例如root)通过SSH连接过的远程主机列表,这里记录的自身连接别人的机器的列表,记录了远程机器的IP和公钥。

  • 登录原理
    举个场景,A机器需要通过SSH免密(前提是私钥没有设置密码哈哈哈,讲真不推荐…)登录B机器,那需要怎么做了?

1.A机器产生一对密钥对(ssh-keygen命令),私钥文件:id_rsa,公钥文件:id_rsa.pub
2.A机器将公钥文件(id_rsa.pub)发给它要登录的B机器(可以通过ssh-copy-id命令),B机器会把这个A机器的公钥信息存到一个名字叫authorized_keys的文件里。
3.完成上述步骤,就可以在A机器,通过ssh B机器IP登录了。

原理:A机器登录B机器原理其实就是A用私钥签名,B用公钥验证签名的过程。

  • SSH的优点
    方便,安全。
    例如下列场景,Jenkins构建,需要运行shell脚本操作部署的机器,那么就可以,通过下列的语句实现:
#如果只是执行一条命令,那么可以这样写
ssh ip 命令
#多条的话,则可以这么写
ssh ip
命令1
命令2
exit
服务端SSH的配置
  • sshd_config配置
    root用户登录,更改ssh配置文件/etc/ssh/sshd_config,下列的配置可以不配置的默认应该是支持的
#启用rsa认证
RSAAuthentication yes
#启用公钥私钥配对认证方式
PubkeyAuthentication yes
  • 重启SSH服务
#重启ssh服务
systemctl restart sshd
客户端机器的配置

这个配置其实一般也是不需要的,因为如果你是Linux系统那么你自身就应该是产生了这样的一个密钥对的,完全可以使用这个来建立连接,所以你完全可以只执行第三步,ssh 【serverIp】直接建立连接,不过这个过程首次应该是会需要输入密码验证的方式来完成公钥的上传,后续则不需要了。

  • 生成公钥私钥对
ssh-keygen -t rsa

一路默认回车,系统在/root/.ssh下生成id_rsa、id_rsa.pub

  • 将id_rsa.pub发送到服务端机器上(让服务器信任该客户端)
ssh-copy-id -i /root/.ssh/id_rsa.pub  【serverIp】
  • 登录(验证)
ssh 【serverIp】
实践(jenkins)

Jenkins里的配置有两种方式:
1.密码登录远程主机,将需要部署的包发送到指定目录
2.SSH登录到远程主机,将需要部署的包发送到指定目录

配置的地方:Configure System [Jenkins],如下图所示。
在这里插入图片描述

参考

1.ssh命令和SSH服务详解 - 钟桂耀 - 博客园 (cnblogs.com)
2.ssh转发代理:ssh-agent用法详解 - 钟桂耀 - 博客园 (cnblogs.com)

这篇关于Linux的SSH基于公私钥验证的方式登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688171

相关文章

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代