Linux 配置 SSH 免密登录

Linux Centos7配置SSH免密登录 阅读详情

SSH 原理

 
SSH
Secure Shell(安全外壳协议),简称 SSH,是一种加密的网络传输协议,用于客户端和主机之间的安全连接,并支持各种身份验证机制。通过 SSH,可以把所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 伪装。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH 目前已经成为 Linux 系统的标准配置。
 

SSH 加密方式

 
传统的网络服务程序,如 FTP、Pop 和 Telnet 其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。

SSH 之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。

现在主要的加密方式有两种:

  • 对称加密(也称密钥加密)

  • 非对称加密(也称公钥加密)
     

对称加密

所谓对称加密,指加密解密使用同一套秘钥。如下图所示:
对称加密—加密
对称加密—解密
对称加密使用同一个密钥来进行加密和解密,加密强度高的话很难破解,这样在传输时确实是安全可靠的,但是如何保证密钥不被泄露呢?在集群中,客户端的数量巨大,一旦任意一个客户端的密钥被窃取,那么整个系统的安全性也不复存在。
 

非对称加密

由于对称加密的弊端,产生了非对称加密,非对称加密中有两个密钥:公钥和私钥。公钥由私钥产生,但却无法推算出私钥。公钥加密后的密文,只能通过对应的私钥来解密。

非对称加密的登录流程:
非对称加密

  1. 服务端收到客户端用户 TopGun 的登录请求,生成一对公钥和私钥,将公钥返回给客户端
  2. 客户端使用公钥,对登录密码进行加密,生成公钥加密字符串
  3. 客户端将公钥加密字符串发送给服务端
  4. 服务端使用对应的私钥,解密公钥加密字符串,得到原始密码
  5. 校验密码,并将登录结果返回给客户端

在非对称加密中,由于只有公钥会被传输,而私钥保存在服务端本地,因此即便公钥被窃取,没有私钥进行解密,也无法得到原始密码,从而保证了系统的安全性。

那么这样 SSH 就绝对安全了吗?显然不,还有一种中间人攻击的方式。
 

中间人攻击

SSH 虽然传输过程中很安全,但是在首次建立连接时并没有办法知道发来的公钥是否真的来自自己请求的服务器,如果有人在客户端请求服务器后拦截了请求,伪装成服务端并返回自己的公钥,这时候一旦建连,那么所有的数据就都能被攻击者用自己的私钥解密。这就是所谓的中间人攻击。

中间人攻击
在该示例图中,存在 Hacker 服务器劫持了你的连接请求(如通过 DNS 劫持等方式),导致你与 Hacker 机器进行连接,因此它能够拿到你的明文密码,并可能通过该密码来攻击真实的服务器,然后你就 GG 了。
 

SSH 安全登录

 
SSH 提供了两种级别的登录方式:

  • 基于口令的安全登录(密码登录)

  • 基于公钥的安全登录(免密登录)
     

1、基于口令的安全登录

只要你知道自己的帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有人冒充真正的服务器,即无法避免中间人攻击。

在中间人攻击的方式中,问题在于如何对服务端的公钥进行验证?在 HTTPS 中可以通过 CA 来进行公证,可是 SSH 的公钥和私钥都是自己生成的,没法公证。只能通过客户端自己对公钥进行确认。

通常 在第一次登录的时候,系统会出现如下提示信息:

The authenticity of host 'ssh-server.example.com (10.10.10.26)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?

在这个认证信息中,可以看到提示:无法确认主机 ssh-server.example.com (10.10.10.26) 的真实性,不过知道它的公钥指纹,是否继续连接?

之所以用 fingerprint(公钥指纹)代替 key,主要是 key 过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行 hash 生成一个 128 位的指纹,这样就方便比较了。

输入 yes 后,会出现如下确认信息:

Warning: Permanently added 'ssh-server.example.com,10.10.10.26' (RSA) to the list of known hosts. 
Password: (enter password)

确认该服务器为可信任服务器,并添加到 known_hosts 文件中,下次连接时不用再次确认,然后输入密码进行验证。

这种简单粗暴的方式相当于让用户自己来判断目标服务器是否是真实服务器,显然这并不是最理想的方式,还是存在一定的安全风险。
 

2、基于公钥的安全登录

在基于口令的安全登录中可以发现,每次登录都需要手动输入密码,不仅麻烦而且存在中间人攻击的风险,也不便于程序的自动化。所以 SSH 提供了另外一种可以免密登录的方式:公钥登录。流程如下:
公钥登录
先在客户端使用 ssh-keygen 生成一对密钥:公钥 + 私钥,手动将客户端公钥追加到服务端的 authorized_key 文件中,完成公钥认证操作。

  1. 客户端向服务端发起登录请求,传递自己的公钥到服务端
  2. 服务端检索 authorized_key 文件,确认该公钥是否存在
  3. 如果存在该公钥,则生成随机数 R,并用公钥对其加密,生成公钥加密字符串 pubKey(R)
  4. 服务端将公钥加密字符串返回给客户端
  5. 客户端使用其私钥解密公钥加密字符串,得到随机数 R
  6. 服务端和客户端通信时会产生一个会话 ID(SessionKey),客服端对 R 和 SessionKey 利用 MD5 生成摘要 Digest1(即 MD5 加密字符串)
  7. 客户端将生成的 MD5 加密字符串传给服务端
  8. 服务端对 R 和 SessionKey 利用相同摘要算法生成 Digest2
  9. 服务端最后比较 Digest1 和 Digest2,如果相同则登录成功
  10. 此时不用输入密码,即可完成建连,然后就能远程执行 shell 命令愉快的玩耍了~

与密码登录相比,公钥登录不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。

利用公钥登录的关键是必须手动将客户端的公钥添加到服务端,比如 GitHub 便有这一步骤,添加了之后便可免密登录。
GitHub SSH
 

SSH 实践

 
下面将实践如何在 Linux 下配置 SSH 免密登录。
 

SSH 相关文件说明

 
.ssh 目录下相关文件:

文件说明
id_rsa私钥
id_rsa.pub公钥
authorized_keys(手动创建)保存已授权的客户端公钥
known_hosts(自动生成)保存已认证的远程主机ID
config(可选)保存不同主机密钥的配置

文件关系示意图:
文件关系示意图
 

Linux 配置 SSH 免密登录

 

1、检查现有 SSH 密钥对

首先检查的主要目的是为了不覆盖现有密钥。运行以下 Is 命令查看,若密钥已存在,则可以直接使用这些密钥并跳过第二步,或选择备份旧密钥并生成新密钥。如果看到 No such file or directory 或 no matches found 意味着没有 SSH 密钥,则可以继续执行下一步并生成新密钥。

ls -al ~/.ssh/id_*.pub

运行结果:

ls: cannot access /root/.ssh/id_*.pub: No such file or directory

 

2、生成新的 SSH 密钥对

ssh-keygen 是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在 ~/.ssh/ 路径下。

ssh-keygen 常用参数:

-t:指定生成密钥的类型,默认使用SSH2d的rsa

-f:指定生成密钥的文件名,默认id_rsa(私钥id_rsa,公钥id_rsa.pub)

-b:指定密钥长度(bits),RSA最小要求768位,默认是2048位;DSA密钥必须是1024位(FIPS 1862标准规定)

-C:添加注释,默认为user@hostname

-P:提供旧密码,空表示不需要密码(-P ‘’)

-N:提供新密码,空表示不需要密码(-N ’‘)

-R hostname:从known_hosts(第一次连接时就会在目录.ssh目录下生成该密钥文件)文件中删除所有属于hostname的密钥

-e:读取openssh的私钥或者公钥文件

-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥

-l:显示公钥文件的指纹数据

-q:静默模式

输入 ssh-keygen 命令,生成密钥,-P ‘’ 表示不设置密码。多数情况下,开发人员和系统管理员使用 SSH 不使用密码,因为它们对完全自动化的流程很有用。

ssh-keygen -t rsa -P ''

加粗样式
这里输入文件保存位置,直接 Enter 表示默认文件位置和文件名(推荐)
ssh-keygen
进入 .ssh 目录下查看文件

cd .ssh
ls

生成私钥与公钥
 

3、添加公钥到 authorized_keys

因为一台机器即能是客户端,又能是服务端,因此 .ssh 目录下可能同时存在 authorized_keys(在该机器为服务端时使用)和 known_hosts(在该机器为客户端时使用)。

本地主机免密登录

检查 .ssh 目录下 authorized_keys 文件是否存在,没有则创建一个,然后将 id_rsa.pub 的内容追加到 authorized_keys 文件中。

cat id_rsa.pub >> authorized_keys   

有个小坑值得一提:authenrized_keys 的权限必须是 600 或更小,否则会连接失败。

保险起见,执行下面命令:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

远程主机免密登录

在本地生成 SSH 密钥对后,为实现免密登录到远程主机,需要将公钥复制到要远程主机。最简单方法是使用 ssh-copy-id 命令:

ssh-copy-id remote_username@server_ip_address

系统将提示输入 remote_username 的密码:

remote_username@server_ip_address's password:

用户通过身份验证后,公钥将添加到远程用户的 authorized_keys 文件,并且将关闭连接。如果由于某种原因, ssh-copy-id 本地主机上没有该程序,则可以使用以下命令复制公钥:

cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address

如此便完成了公钥安装,以后就可以 ssh 免密登录了,可以尽情的玩耍啦~
 

4、使用 SSH 免密登录

完成上述步骤后,就能够登录到远程主机而不会被提示输入密码,测试口令:

本地登录:

ssh localhost

远程登录:

ssh remote_username@server_ip_address

映射 ip 地址与主机名,简化登录命令:

echo "ip_address hostname" >> /etc/hosts
ssh hostname
【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题 阅读详情

相关推荐

防雷防浪涌电路设计

通信线路或者电源线路通常会铺设到户外,一旦线路铺到户外后,就需要考虑防雷的问题了,那么怎么设计保护电路,能够防止雷电等浪涌对电路的破坏呢?

manhuami2007的博客 1万+

解决Linux运行shell脚本提示No such file or directory错误提示

目录场景复现解决附上linux重启jar项目方法 场景复现 在Linux上面进行重启springboot项目时,手动在linux上面创建了sh文件,进行运行提示:【No such file or directory】 解决 在其他服务器中写好shell脚本测试正常,但只是复制文字到另一服务器上以脚本方式运行命令时提示No such file or directory错误,那么一般是文件格式是dos格式的缘故,改成unix 格式即可。 附上亲测可用方法: 1、用vim打开该sh文件:【vi 文件名】 2、

Apollo 1万+

图解“交易·支付·清结算·账务”全局

这个过程大致是这样的,用户先到平台选择喜欢的“餐品”,然后“下单”,生成交易“账单”,用户选择支付方式进行“支付”,支付成功后平台要履行承诺把餐送到,“履约”完成以后平台就开始进行各方利益的“清分”,计算清楚应给谁多少钱,并“记账”,最后将款项“结算”给商家,这个过程如图7所示。交易系统请求订单系统创建订单,因为不清楚平台和商家之间的清结算协议,所以暂且认为所有优惠由平台提供给用户,后续平台再基于协议跟商家之间做优惠的分摊,将上述商品、优惠、计价等信息集成到一起,就得到了完成的订单信息了,如表4所示。

wjianwei666的专栏 1万+

ansible

ansible学习记录

知本知至的博客 962

汽车电子电气架构诊断功能开发全流程解析

文章作者是一位在魔都工作的汽车电子工程师,坚持长期主义,并分享了一段关于“钝感力”的文字,强调面对困境的韧劲和耐力,以及不被外界噪音干扰的重要性。文章详细介绍了汽车电子电气架构(EEA)的诊断功能开发流程,涵盖设计、实现、生产、运维及售后五大环节。作者从技术实现维度展开,详细描述了诊断系统架构设计、供应商功能实现、产线集成与标定、云端数据交互以及售后诊断应用场景。文章还总结了技术演进趋势,包括AI融合、OTA 2.0和区块链应用等,强调了标准化协议与工具链在全链路诊断能力中的重要性。最后,作者鼓励读者相信时

Soly_kun的博客 1219

贴片二极管SOD封装详解:SOD-123/323/523尺寸焊盘设计要点

表面贴装技术中,二极管封装尺寸直接决定PCB布局与焊接可靠性。SOD封装作为小外形二极管的主流形态,其SOD-123、SOD-323、SOD-523三种规格分别对应不同的功耗与占板面积权衡。理解封装尺寸、焊盘设计计算逻辑和钢网开窗原理,是避免立碑、虚焊等工艺缺陷的关键。在可穿戴设备、电源保护等空间受限场景中,合理选择封装不仅能优化散热路径,还能提升量产良率。本文从焊盘计算、工艺要点到选型策略,全面解析SOD封装的工程实践。

weixin_42520780的博客 296

SSH 登录Linux提示No such file or directory

SSH 登录Linux提示No such file or directory 解决办法:

霍格沃茨魔法学校 2154

从零到一:RagFlow源码架构深度解析与二次开发实战指南

本文深入解析RagFlow源码架构,提供从环境搭建到二次开发的全流程实战指南。作为企业级AI搜索框架,RagFlow通过模块化设计和多模态处理能力,支持自定义智能体开发与文搜文档功能,帮助开发者高效构建智能搜索系统。

w1x2y3的博客 267

ssh连接所生成的known_hosts出现的问题

问题现场及解析 用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,如果我们重新安装系统,其公钥信息还在,连接会出现如上图所示 问题处理 处理一 rm -rf ~/.ssh/known_hosts ++++++++++...

weixin_30619101的博客 3748

从 QQ 聊天到 AI Agent:AstrBot + NapCat 接入 DeepSeek

<think>我们根据要求,根据提供的内容生成≤150字的文章摘要。内容是关于在Windows上使用Docker部署AstrBot+NaPCat,配置DeepSeek,实现QQ AI机器人。摘要需简洁概括主要步骤和结论。注意字数。</think>在Windows 11上通过Docker一键部署AstrBot与NapCat,实现QQ机器人。NapCat扫码登录QQ,AstrBot接入并配置DeepSeek API,完成AI对话。后续可扩展人格、插件及MCP工具,并通过cpolar提供公网管理入口,打造可扩展的

天道酬勤 1万+

第3.2.1章 Eigen代码实战:四元数赋值用法总结及与变换矩阵转换

Eigen库中四元数(Quaternion)的赋值方法解析:Quaterniond和Quaternion<double>本质相同,但Quaterniond是更简洁的别名。主要赋值方式包括直接构造(w,x,y,z分量、旋转矩阵或轴角)、赋值运算符和成员函数赋值。使用时需注意参数顺序、归一化处理和头文件包含,常见错误包括模板参数缺失和构造顺序错误。四元数广泛应用于旋转矩阵转换、姿态组合等场景,合理选择赋值方式能提高代码可读性和正确性。

行知SLAM 587

bash: cd: /root/.ssh: No such file or directory

centos7 ssh设置密钥时出现的问题,解决方法为:先用yum安装ssh,然后再生成密钥 1.yum install -y openssl openssh-server 2.ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

qq_41240287的博客 4608

C++大牛的博客

1. C++大牛的博客     Bjarne Stroustrup的博客: Bjarne Stroustrup’s Homepage Bjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样

程序猿老樊的博客 6244

Linux ssh 免密登录配置

⏹Linux ssh 免密登录配置

菜鸟记录 5459

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

从零到一:Windows 配置 SSH 免密登录 Linux 的终极指南

第三次,终于成功了,但你已经被气得想砸键盘了!如果你是一个开发者,或者经常需要远程管理 Linux 服务器,那么这篇文章绝对适合你。我们会从零开始,一步步实现这个功能,顺便还会讲几个笑话,让你在学习的路上不孤单!通过配置 SSH 密钥对,你可以直接登录服务器,无需输入密码,既方便又安全。通过以上步骤,你可以在 Windows 上配置 SSH 密钥对,并实现免密登录 Linux 服务器。设置密钥的密码(可选,如果不想设置密码,直接按回车跳过)。如果配置正确,你应该可以直接登录,无需输入密码。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1256

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

配置 SSH 免密登录到 Linux 主机

在 Windows 10 系统中,你可以通过以下步骤配置 SSH 免密登录到 Linux 主机。Windows 10 自带的 OpenSSH 客户端可以完成这一任务。

ANiy520的博客 954

【Linux】SSH 免密登录的配置方法

摘要 本文详细介绍了Linux系统中配置SSH免密登录的方法。SSH免密登录通过密钥对验证替代密码输入,既提升安全性又提高效率。文章首先解析了SSH免密登录的核心原理——基于非对称加密的公钥/私钥机制,并对比了RSA、ED25519等密钥类型的优缺点。随后提供了详细的密钥生成步骤,包括ssh-keygen命令的使用示例。最后重点讲解两种公钥部署方式:推荐使用ssh-copy-id自动化工具,也介绍了手动复制公钥到远程服务器authorized_keys文件的方法。通过本文,读者可全面掌握SSH免密登录从密钥

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Linux配置SSH免密登录

Linux配置SSH免密登录

一份耕耘,一分收获 8392

如何在Windows与Linux(Ubuntu/CentOS)之间配置SSH免密登录

每人一个文件夹,统一管理分支克隆同一个仓库到不同文件夹。每人在自己文件夹中创建独立的分支开发,定期同步主分支。使用Fork机制每个人从主仓库Fork到自己的远程仓库。在服务器上各自克隆自己的远程仓库,开发完成后提交到自己的仓库,再通过Pull Request将代码合并到主仓库。

weixin_51524504的博客 2928

如何在Linux上配置SSH密钥以实现免密登录

通过在Linux上配置SSH密钥认证,你可以实现免密登录,从而简化远程操作并提高安全性。本文详细介绍了生成SSH密钥对、将公钥复制到远程服务器以及配置SSH客户端和服务器的步骤。希望这些内容能够帮助你更好地理解和使用SSH密钥认证。

2408_88802129的博客 981

Linux 配置SSH免密登录

Linux系统中,如何快速配置免密连接

此人很懒,还没有添加简介 777

Linux512 ssh免密登录 ssh配置回顾

如果想增加一些连接条件,例如不允许root用户连接:找到/etc/ssh/sshd_config 文件中的条目 PermitRootLogin 修改为NO,如果想修改访问端口 则改port 后的数字。scp [-P 端口号] ~/.ssh/id_rsa.pub code@11.1.1.100:/home/code。scp [-P 端口号] ~/.ssh/id_rsa.pub code@11.1.1.100:/home/code。3.在RealServer把公钥写入到私钥中。

czhc1140075663的博客 885

Linux SSH免密登录配置

Linux SSH免密登录配置

Sherlock的博客 424

Linux - SSH免密登录配置

1 登录方生成密钥对 ssh-keygen (1)输入ssh-keygen 备注:输入ssh-keygen回车之后,在之后的两个确认中,均只按回车即可 (2)以下为查看生成的密钥对 2 将公钥coyp到目的机器上 ssh-copy-id 目标机器 (1)之前登录过的情况 (2)之前未登录过的情况 ...

BlessingXRY的博客 338

Linux下配置SSH免密登录

【代码】Linux下配置SSH免密登录。

java_Waaangzy的博客 406

linux集群ssh免密登录配置

ssh免密登录

个人技术学习笔记 1043

【Linux】配置SSH免密登录

简介 每次在本地计算机上通过 SSH 远程连接 Linux 服务器的时候都需要输入密码,非常繁琐,今天教大家如何配置免密登录。 教程 在本地通过 RSA 加密算法生成公私钥对 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_test t:指定加密类型 b:指定加密字长 f:指定保存路径 $ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_blog Generating public/private rsa key pair

XavierJ的博客 4958
上一篇: Hive 初级练习 50 题(完美解答版)
下一篇: Scala 数组、集合函数大全(史上最全)
GodSuzzZ
博客等级 码龄7年 319粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值