Linux 服务器使用 ssh 密钥登录

背景

我们平时登录云服务器都是直接输入 IP、账号、密码进行登录,这种方式当是你自己的服务器的时候就没什么关系。

但是如果在企业中,当员工人数日渐增多时,又需要给后端开放测试服务器、或正式服务器的权限时。

不得不面临的一个问题就是当其中一个员工离职时,需要修改服务器的密码。

这样就会变得有些繁琐和麻烦。

所以这次就来配置使用 ssh 密钥来登录服务器,员工在自己的本机上生成密钥和公钥,然后将公钥发给领导在服务器上配置好。

员工使用本地的密钥登录服务器。

当员工离职时,只需要在服务器上将这个员工的公钥删除就可以了。

SSH 支持各种身份验证机制。最常见的两种是基于密码和基于公钥的身份验证。公钥的身份验证是基于数字的签名,并且比传统的密码身份验证更安全,更方便。

这里我们就是使用基于公钥的身份验证。

操作

1. 本地生成密钥和公钥

生成 SSH 密钥的命令是 ssh-keygen。你可以不使用任何参数直接生产 SSH 私钥与公钥。也可以使用您的电子邮件地址作为注释来生成新的 4096 位 SSH 密钥对。

ssh-keygen #在你的本地计算机生成ssh密钥

ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

系统将提示您指定文件名 Enter file in which to save the key (/home/myfreax/.ssh/id_rsa):。默认位置和文件名应该适合大多数用户。 按 Enter 接受并继续

接下来,系统会要求您输入安全密码或者称为密码短语 Enter passphrase (empty for no passphrase):。密码短语增加了一层额外的安全性。

如果您设置密码短语,则每次使用该密钥登录到远程计算机时,系统都会提示您输入密码短语。如果您不想设置密码短语,请按 Enter。

如果你没有什么特别的要求你在运行 ssh-keygen 命令,全部直接回车 Enter 键使用默认值创建 SSH 密钥即可。

要验证是否生成了新的 SSH 密钥对,请运行命令 ls ~/.ssh/id_* 查看 SSH 密钥是否存在。如果存在说明您已经在 CentOS Linux 计算机成功生成了 SSH 密钥。

/home/myfreax/.ssh/id_rsa 
/home/myfreax/.ssh/id_rsa.pub
2. 将公钥复制到远程服务器

现在您本地 CentOS 计算机有了 SSH 密钥,下一步是将公用密钥复制到要管理的远程服务器。

将公钥复制到服务器的最简单和建议的方法是使用 ssh-copy-id 命令。运行命令 ssh-copy-id server_username@server_ip_address 即可复制远程服务器。

server_username 是远程服务器用户的名称,server_ip_address 是你的服务器 IP 地址。系统将提示您输入远程用户密码。

通过身份验证后,公钥 ~/.ssh/id_rsa.pub 将追加到远程用户 ~/.ssh/authorized_keys 文件中,然后 ssh-copy-id 将会退出。

并且提示你可以运行命令 ssh 'username@server_ip_address' 登录到远程服务器。

ssh-copy-id remote_username@server_ip_address
remote_username@server_ip_address's password:

如果由于某些原因您的本地计算机上没有 ssh-copy-id 实用程序,请使用以下命令复制公钥。

cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'username@server_ip_address'"
and check to make sure that only the key(s) you wanted were added.
3. 修改服务器 sshd_config 配置文件

要允许使用密钥(公钥 / 私钥)登录,需要修改 /etc/ssh/sshd_config 文件中以下几个配置:

将 PubkeyAuthentication 设置为 yes,表示启用公钥认证方式。

将 AuthorizedKeysFile 设置为存储公钥的路径和文件名,例如:AuthorizedKeysFile ~/.ssh/authorized_keys,表示公钥文件存储在当前用户的 .ssh 目录下的 authorized_keys 文件中。

将 PasswordAuthentication 设置为 no,表示禁用密码认证方式,只允许使用公钥认证方式登录。这样可以增加系统的安全性。

修改完以上配置后,需要重启 sshd 服务,以使配置生效。可以使用以下命令重启 sshd 服务:

sudo systemctl restart sshd

完成上述步骤后,您应该能够免密码登录到远程服务器。要测试它,请尝试通过 SSH 登录到服务器。

如果您尚未设置私钥的密码短语,则会立即登录。 否则,将提示您输入密码。

ssh remote_username@server_ip_address

禁用 SSH 密码身份验证

禁用密码身份验证会为服务器增加一层安全保护。在禁用 SSH 密码身份验证之前,请确保您可以免密码登录服务器,并且你登录用户具 sudo 权限。

首先登录到您的远程服务器,然后使用你喜欢的文本编辑器打开 SSH 配置文件 /etc/ssh/sshd_config。在本教程中,我们将使用 vim 打开文件。

使用 vim 搜索 PasswordAuthentication,ChallengeResponseAuthentication,UsePAM 指令并改为 no。

完成后,保存文件并运行命令 sudo systemctl restart sshd 重新启动 SSH 服务。此时,基于密码的身份验证已被禁用,你将不能使用密码登录。

注意:禁用密码登录后,请保管好你的 SSH 密钥文件,如果 VPS 提供商提供 VNC 远程控制可以很容易恢复,如果没有就………。

ssh sudo_user@server_ip_address=
sudo vim /etc/ssh/sshd_config #在你的服务器上
sudo systemctl restart sshd #在你的服务器上
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

结论

我们向您展示了如何生成 SSH 密钥对以及如何设置基于 SSH 密钥的身份验证。您可以使用同一密钥来管理多个远程服务器。您还了解了如何禁用 SSH 密码身份验证。

默认情况下,SSH 监听端口 22。更改默认的 SSH 端口可降低自动攻击的风险。为了简化您的工作流程,请使用 SSH 配置文件定义您的所有 SSH 连接。

问题

在实际操作中可能会有把以上所有的步骤都走完后,发现还是无法通过 ssh 密钥登录的情况。

这种情况一般都是因为文件的所属用户或文件的权限不对导致的。

  1. 查看本地的 ~/.ssh/id_rsa 文件的权限是否是 600 (即只有当前用户可以读写该文件),通过 chmod 600 ~/.ssh/id_rsa 命令赋予权限。

  2. 查看服务器中的 /root/.ssh/authorized_keys 是不是 600 权限。

  3. 查看服务器中的 /root 目录的所属用户是不是 root,使用 chown root:root /root 对该目录更改所属用户。

番外

如何对本地已有的 id_rsa 密钥设置密码?
您可以使用以下命令对本地已有的 id_rsa 密钥设置密码:

ssh-keygen -p -f ~/.ssh/id_rsa

命令中的 -p 参数表示修改密码,-f 参数指定要修改密码的密钥文件。执行命令后,系统会提示您输入旧密码(如果有的话),然后要求您输入新密码两次以确认。完成后,您的 id_rsa 密钥文件就被加密了。下次使用该密钥时,需要输入密码才能使用。

如何去除密码?
如果您想要去除本地已有的 id_rsa 密钥的密码,可以使用以下命令:

ssh-keygen -p -f ~/.ssh/id_rsa -P <old_password> -N ""

命令中的 -p 参数表示修改密码,-f 参数指定要修改密码的密钥文件,-P 参数指定原来的密码,-N 参数指定新的密码。在这个命令中,我们将新密码设置为空字符串,这样就相当于去除了原来的密码。

执行命令后,系统会提示您输入旧密码(如果有的话),然后将新密码设置为空字符串。完成后,您的 id_rsa 密钥文件就被去除了密码。下次使用该密钥时,无需输入密码即可使用。

转载 https://learnku.com/articles/76375

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

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

相关文章

node-red中输出当前时间

在node-red中输出当前时间&#xff0c;并指定时区为北京时间&#xff0c;时间格式为&#xff1a;YYYY-MM-DD HH:mm:ss 可以使用moment.js库&#xff0c;也可以自行写一个function&#xff0c;介绍一下使用自定义function的方法。 var now new Date(); var formattedDate …

SpringDataRedis 基本使用

1.1 简介 1.1.1 概述 Spring Data 中有一个成员 Spring Data Redis&#xff0c;他提供了 RedisTemplate 可以在 Spring 应用中更简便的访问 Redis 以及异常处理及序列化&#xff0c;支持发布订阅等操作。 1.2 RedisTemplate 常见 API   RedisTemplate 针对 jedis 客户端中大…

c++知识总结

一 细碎知识 1.9 I 1.9.1 inline 参考 C语言中头文件中的 static inline 函数以及 __attribute__((always_inline)) 强制内联展开-CSDN博客https://blog.csdn.net/m0_37616597/article/details/104138980 慎用 inline 内联能提高函数的执行效率,为什么不把所有的函数都定…

程序是怎么跑起来的

前言 本篇文章从整体流程上描述一下一个程序是怎么在计算机中运行的&#xff0c;整个流程分为三大块&#xff1a; 程序的创造程序的编译程序的运行 程序的创造 一般来说&#xff0c;创造一个程序是代码工程师的责任&#xff0c;虽然现在有很多工具可以不经过编码就能创造一…

高分辨率台阶仪,精准掌控细节测量

什么是台阶仪&#xff1f; 台阶仪是一款超精密接触式微观轮廓测量仪&#xff0c;可以对微米和纳米结构进行膜厚和薄膜高度、表面形貌、表面波纹和表面粗糙度等的测量。 什么是台阶仪分辨率&#xff1f; 台阶仪分辨率是指在台阶仪的测量范围内&#xff0c;仪器能够精确分辨出的…

等保2.0的变化

1法律地位得到确认 《中华人民共和国网络安全法》第21条规定“国家实行网络安全等级保护制度”&#xff0c;要求“网络运营者应当按照网络安全等级保护制度要求&#xff0c;履行安全保护义务”&#xff1b;第31条规定“对于国家关键信息基础设施&#xff0c;在网络安全等级保护…

1-SaaS通识

云计算 讲SaaS必须先讲云计算。云计算通过互联网提供计算服务&#xff0c;包括服务器、存储、数据库、网络、应用等&#xff0c;采用按需付费的定价模式。 云计算的4种部署模式 公有云&#xff1a;由云服务商拥有和管理&#xff0c;就好比水电&#xff0c;居民共享&#xff…

外包干了2年,技术退步明显...

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

TaskWeaver:代码优先的代理框架

大型语言模型 (LLM) 在自然语言理解和生成方面表现出了令人印象深刻的能力&#xff0c;导致它们在聊天机器人和虚拟助理等应用中得到使用。然而&#xff0c;现有的法学硕士框架在处理具有丰富数据结构的特定领域数据分析任务时面临局限性。此外&#xff0c;他们还难以灵活地满足…

5.2 Linux FTP 服务

1、概念介绍 FTP&#xff08;File Transfer Protocol:文件传输协议&#xff09;作用Internet 上用来传送文件的协议 FTP Server&#xff08;File Transfer Protocol Server&#xff09;是在互联网/局域网上提供文件存储和访问服务的计算机&#xff0c;它们依照FTP协议提供服务…

Sqoop安装与配置-shell脚本一键安装配置

文章目录 前言一、使用shell脚本一键安装1. 复制脚本2. 增加执行权限3. 执行脚本4. 加载用户环境变量5. 查看是否安装成功 总结 前言 本文介绍了如何使用Shell脚本一键安装Sqoop。Sqoop是一个用于在Apache Hadoop和结构化数据存储&#xff08;如关系数据库&#xff09;之间传输…

优先考虑泛型

Java中的泛型&#xff08;Generics&#xff09;提供了一种参数化类型的机制&#xff0c;使得你可以编写更灵活、类型安全的代码。下面是一个例子&#xff0c;说明在Java中优先考虑泛型的好处&#xff1a; 考虑一个简单的容器类&#xff0c;它可以存储任意类型的元素&#xff0…

【Avue】点击新增再点击表单得radio选项出现新表单,且编辑页面关不掉新表单处理方法

一、问题描述 1、点击新增 2、 点击radio选择值 1、点击否得时候没反应 2、点击是得时候出现新表单 2.1、旧代码 {label: 是否危险源,prop: isBigdanger,searchLabelWidth: 120,overHidden: true,span: 24,rules: [{required: true,message: 请选择是否重大危险源,trigger: bl…

离散事件仿真库SimPy的执行逻辑介绍

文章目录 内容介绍详细执行逻辑分析大致仿真流程Simpy核心类的细节Environment 类Event 类Process类&#xff08;Event&#xff09; 基于案例详细介绍仿真逻辑env.run() 方法逻辑env.process() 方法逻辑 参考文章&#xff1a; SimPy Discrete event simulation for Pythonpyth…

孟德尔随机化+WGCNA+预后模型,7+轻松get

今天给同学们分享一篇生信文章“Exploring the causality and pathogenesis of systemic lupus erythematosus in breast cancer based on Mendelian randomization and transcriptome data analyses”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3…

浅显易懂 @JsonIgnore 的作用

1.JsonIgnore作用   在json序列化/反序列化时将java bean中使用了该注解的属性忽略掉 2.这个注解可以用在类/属性上   例如&#xff1a;在返回user对象时&#xff0c;在pwd属性上使用这个注解&#xff0c;返回user对象时会直接去掉pwd这个字段&#xff0c;不管这个属性有没…

FFmpeg的AVOutputFormat

还是和前文一样&#xff0c;先把架构勾勒出来&#xff0c;后期慢慢讲一下代码流程&#xff0c;可以进行各类网络协议的推流&#xff0c;各类容器的封装 结构体 其实就一些回调函数&#xff0c;看到priv_data_size没&#xff0c;这个指向了AVFormatContext的priv_data typedef…

laravel使用ajax登录,和自定义生成验证码

使用larave框架操作ajax发送get请求&#xff0c;和自义定验证码 1. 后端登录代码 <?phpnamespace CriusWeb\FzUserAdmin\Http\Controllers;use App\Models\Admin; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Routing\Controller; use I…

【Idea】SpringBoot项目中,jar包引用冲突异常的排查 / SM2算法中使用bcprov-jdk15to18的报错冲突问题

问题描述以及解决方法&#xff1a; 项目中使用了bcprov-jdk15to18 pom依赖&#xff0c;但是发现代码中引入的版本不正确。 追溯代码发现版本引入的是bcprov-jdk15on&#xff0c;而不是bcprov-jdk15to18&#xff0c;但是我找了半天pom依赖也没有发现有引入bcprov-jdk15on依赖。…

MySQL常见死锁的发生场景以及如何解决

死锁的产生是因为满足了四个条件&#xff1a; 互斥占有且等待不可强占用循环等待 这个网站收集了很多死锁场景 接下来介绍几种常见的死锁发生场景。其中&#xff0c;id 为主键&#xff0c;no&#xff08;学号&#xff09;为二级唯一索引&#xff0c;name&#xff08;姓名&am…