文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

linux关于ssh免密登录、known_hosts文件

2023-08-18 16:51

关注

1. 关于ssh

SSH 是 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是目前广泛采用的安全登录协议,专为远程登录会话和其他网络服务提供安全性的协议,替代以前不安全的Telnet协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

scp、sftp等都是基于ssh协议来进行远程传输的。

2. 对称加密和非对称加密

3. ssh免密登录原理

服务器A要免密登录服务器B,则要把服务器A的公钥存到服务器B的授权公钥文件中;先在服务器A上生成一对秘钥(ssh-keygen),然后将公钥拷贝到服务器B的authorized_keys文件中。

原理:

4. ssh免密登录配置

在进行配置之前需要先关闭防火墙,并且最好给服务器设置主机名,并配置 /etc/hosts 文件映射。

systemctl status firewalld.service # 查看防火墙状态systemctl stop firewalld.service # 关闭防火墙systemctl disable firewalld.service # 移除防火墙开机自启动

步骤:

  1. 假设A服务器需要免密登录B服务器,那么在A服务器执行命令:ssh-keygen -t rsa(默认就是RSA加密算法,可不用加-t rsa);密钥对生成过程会提示输入私钥加密密码,可以直接回车不使用密码保护。命令执行完成后会在~/.ssh目录下生成两个文件:id_rsa(私钥)和id_rsa.pub(公钥)
  2. 将公钥文件id_rsa.pub中的内容拷贝到B服务器的~/.ssh目录下的授权公钥文件authorized_keys中

5. ssh免密登录注意事项

首先,假设A服务器要免密登录B服务器,我们将A服务器通过ssh-keygen命令生成的公钥写进B服务器authorized_keys文件中。涉及以下注意事项:

A服务器生成的公钥如下:root@sangfor-node7 代表这是root用户生成的公钥

请添加图片描述

如果我们将其拷贝到B服务器/root/.ssh/authorized_keys文件中,那么A服务器就能以B服务器的root账号免密登录成功,也就是:ssh root@B服务器 可以免密登录成功;但是如果是以B服务器的其它账号进行登录,则无法免密,例如:ssh admin@B服务器 需要输入admin账号的密码才可以登录。

如果我们希望A服务器也能以B服务器的admin账号免密登录成功,那么还需要将A服务器的公钥拷贝到B服务器:/home/admin/.ssh/authorized_keys文件中(即admin用户的家目录下)。

另外,A服务器生成的公钥文件中包含 root@sangfor-node7 代表这是root用户生成的公钥;如果A服务器是以root账号去执行命令:ssh root@B服务器 可以免密登录成功;但是如果A服务器是以其它账号,例如wyf,去执行命令:ssh root@B服务器 则需要输入密码;因为B服务器/root/.ssh/authorized_keys文件中存储的是A服务器root用户的公钥,如果我们希望A服务器以wyf账号登录去执行命令:ssh root@B服务器 也可以免密登录成功;那么需要在A服务器切换成wyf账号,执行 ssh-keygen,那么生成的公钥文件位于 /home/wyf/.ssh/ 目录下,并且包含 wyf@sangfor-node7 ,代表这是wyf用户的公钥。再把这个公钥写入B服务器authorized_keys文件中即可。

如下:

请添加图片描述
请添加图片描述

最后,还需要注意域名问题,由于A服务器配置了主机名为 sangfor-node7,因此生成的公钥文件包含主机名,如:root@sangfor-node7,但是B服务器并不知道这个主机名代表哪个ip地址,因此需要在B服务器的 /etc/hosts 文件中配置 sangfor-node7 主机名和ip的映射。

6. github配置本机ssh公钥步骤及原理

如果我们要把本地代码以ssh方式push到github上,为避免每次push都需要输入github账号和密码,则需要配置本机免密登录github,免密登录原理和A服务器免密登录B服务器一样。

配置步骤参考文档:https://blog.csdn.net/wenfu814/article/details/120625844

7. known_hosts文件

A通过ssh首次连接到B,B会将公钥1(host key)传递给A,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告,并且需要用户交互式的输入yes/no, 避免受到DNS Hijack之类的攻击;如果公钥相同,则不会发出警告。

例如:
A服务器首次ssh登录B服务器,由于A服务器的known_hosts文件中没有B服务器的公钥,因此控制台会发出警告,并且需要用户输入yes/no

请添加图片描述

当我们输入yes之后,A服务器的known_hosts文件会增加一条记录(B服务器的公钥);再输入B服务器的密码,ssh登录成功

请添加图片描述

当A服务器再次ssh登录B服务器,B依然会传递给A一个公钥,OpenSSH会核对公钥,将该公钥和A服务器known_hosts文件保存的B服务器的公钥进行对比,由于相同,则不会发出警告,直接让用户输入密码

请添加图片描述

如果我们不希望在进行ssh登录时进行公钥检查,可以加上 "StrictHostKeyChecking no" 跳过公钥检查,就不需要用户手动输入yes/no(这在一些自动化场景经常使用到)

请添加图片描述

备注:如果A通过ssh登陆B时提示 Host key verification failed.;原因是A的known_hosts文件中记录的B的公钥1与连接时B传过来的公钥2不匹配。
解决方法:删除A的known_hosts文件中记录的B的公钥,当再次ssh登录B时,重新写入B服务器最新的公钥即可。

来源地址:https://blog.csdn.net/can_chen/article/details/128178370

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯