Linux 批量添加 known_hosts

这篇具有很好参考价值的文章主要介绍了Linux 批量添加 known_hosts。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

我们在做完linux ssh 免密登录后,通常会执行一些自动化任务(比如启动Spark集群),也就是需要ssh到每台节点执行相同命令。但是有一个问题就是如果 known_hosts 文件中不存在这个ip的话,在第一次连接时会弹出确认公钥的提示,需要手动输入 yes,才能继续往下进行。输入yes 后会将公钥添加到 .ssh/known_hosts 中,下次连接时就不需要再次确认了。但是如果节点比较多的话,假如有100个节点,那么我们需要手动输入100次 yes 比较麻烦。本文就是记录如何通过配置或者命令来解决这个问题,方便我们后面执行相关的操作。

  • ssh 到其他节点

Linux 批量添加 known_hosts,linux,Linux,ssh

  • 启动Spark集群

Linux 批量添加 known_hosts,linux,Linux,ssh

  • 输入yes后连接成功,并添加公钥到 known_hosts,这里的密钥类型为 ECDSA

Linux 批量添加 known_hosts,linux,Linux,ssh

cat .ssh/known_hosts
[192.168.1.2]:6233 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAymd866NPMmHBlwT3noxxuWqqLcnfMBf5fqgUtP2uaXmNoEApOa7go5RSSx4xzO8CP1u0fOVyOqEYMYJU5S2GQ=

解决方案一:ssh-keyscan

ssh-keyscan 命令是一个收集大量主机公钥(HostKey)的实用工具。设计目的是帮助建立和验证 known_hosts 文件。使用了非阻塞 socket I/O 函数, 尽可能多的并行访问多个主机, 因此它的效率很高. 它可以在数十秒内采集某域中 1,000 台主机的密钥, 即使某些主机离线或不使用 ssh. 扫描的时候无须登录目标主机, 也不涉及任何加密操作.

引用自:https://developer.aliyun.com/article/1114651

命令

ssh-keyscan -p 6233 -t ECDSA -f hostlist.txt >> .ssh/known_hosts

通过这个命令可以将 hostlist.txt 中所有的ip对应的HostKey添加到known_hosts中,这样我们再执行自动化脚本ssh这些节点时就不弹出公钥确认的提示了。

hostlist.txt 是我们要添加的所有的ip

cat hostlist.txt

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10

结果:
Linux 批量添加 known_hosts,linux,Linux,ssh

用法

ssh-keyscan
usage: ssh-keyscan [-46cHv] [-f file] [-p port] [-T timeout] [-t type]
                   [host | addrlist namelist] ...

参数解释

参数 释义
-p 远程主机的端口
-f 从指定文件中读取主机列表
-t 密钥类型:rsa、dsa、ecdsa、ed25519,不缺分大小写
-T 设置尝试连接超时时间
-v 显示调试信息
-4 强制只使用 IPv4 地址
-6 强制只使用 IPv6 地址
host、addrlist namelist 主机名或IP地址,可以以空格分割写多个ip地址
  • -p port

如果没有指定正确的端口,不报错也不返回任何信息(正常应该返回对应的公钥信息),第一次使用如果因为没有使用正确的端口导致不返回任何信息,会使人产生疑惑,误认为该命令不好使~

Linux 批量添加 known_hosts,linux,Linux,ssh

  • host | addrlist namelist 示例
ssh-keyscan -p 6233 -t ECDSA 192.168.1.1
ssh-keyscan -p 6233 -t ECDSA 192.168.1.1 192.168.1.2

多个ip之间是并行执行的,没有先后顺序

Linux 批量添加 known_hosts,linux,Linux,ssh

  • -t type
    有四种密钥类型 rsa、dsa、ecdsa、ed25519,上面的命令中指定的类型为 ECDSA,之所以使用类型 ECDSA 是因为我们在最上面的图片中可以的看到,在输入yes 后会自动添加公钥到 known_hosts,类型就是 ECDSA。当然使用其他类型也可以满足我们的需求,只要有一种类型的的公钥加到known_hosts文件中,再次连接时就不会弹出公钥提示了。不同的服务器支持的类型不太一致,有资料说和ssh协议版本有关系,但是并不确定是否正确。我的服务器支持三种类型,不支持 dsa 类型,不清楚为啥。

如果不指定密钥类型,则返回所有的支持的公钥类型对应的公钥。known_hosts 存在其中一个或多个公钥类型对应的公钥,连接时都不会弹出公钥提示。

ssh-keyscan -p 6233 -t rsa 192.168.1.1
ssh-keyscan -p 6233 -t dsa 192.168.1.1
ssh-keyscan -p 6233 -t ecdsa 192.168.1.1
ssh-keyscan -p 6233 -t ed25519 192.168.1.1
ssh-keyscan -p 6233 192.168.1.1

Linux 批量添加 known_hosts,linux,Linux,ssh

有资料说支持哪些类型可以在 /etc/ssh/sshd_config 查看,确实有四个密钥类型,并且注释掉了一个dsa,好像对应上了,但是当我修改配置,将其他三个都注释掉或部分注释掉并重启sshd服务后,ssh-keyscan 返回的结果是一样的,还是同样支持三种密钥类型,不支持dsa~

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

注释

在上面截图中,我们可以看到没个密钥类型返回的信息中都包含一条注释:

# 192.168.1.1:6233 SSH-2.0-OpenSSH_7.4

这个好像是ssh的版本信息,不知道是在哪里输出的,怎么去掉打印这个注释,注释信息不会添加到 known_hosts 中。

解决方案二:StrictHostKeyChecking

  • StrictHostKeyChecking=no 安全级别最低。如果对应的HostKey在本地不存在,会自动添加到known_hosts,并且给出一个警告。
  • StrictHostKeyChecking=ask 默认的级别。如果对应的HostKey在本地不存在,弹出公钥提示。
  • StrictHostKeyChecking=yes 安全级别最高,如果对应的HostKey在本地不存在,认证失败,拒绝连接。

Linux 批量添加 known_hosts,linux,Linux,ssh

所以我们可以修改StrictHostKeyChecking为no,这样再第一次连接时就会自动将HostKey添加到known_hosts文件中了,之后再将StrictHostKeyChecking改为默认的ask级别。

全局配置

/etc/ssh/ssh_config 客户端配置,不需要重启sshd服务,注意不是/etc/ssh/sshd_config (服务端配置),这俩文件名相似,我最开始没注意到是客户端配置,修改错了,并且重启sshd服务,导致sshd服务启动失败,会导致服务器无法ssh远程连接。

用户环境配置

~/.ssh/config,如果没有这个文件,可以新建,然后添加 StrictHostKeyChecking=no,这个配置文件要比全局配置文件优先级高。

命令参数

ssh -p 6233 -o StrictHostKeyChecking=no 192.168.1.2

Linux 批量添加 known_hosts,linux,Linux,ssh

这个需要修改对应的自动化脚本,比如修改 spark的配置文件 spark-env.sh,添加配置

export SPARK_SSH_OPTS="-p 6233 -o StrictHostKeyChecking=no"

但是有些自动化脚本可能不太好添加配置,对于这种方式就不合适了。
Linux 批量添加 known_hosts,linux,Linux,ssh

参考

  • https://blog.csdn.net/u013958257/article/details/123253942

修改 known_hosts 位置

UserKnownHostsFile ~/dkl/known_hosts

同样是客户端配置,可以在 ~/.ssh/config/etc/ssh/ssh_config 添加该配置项

ssh -p 6233 -o StrictHostKeyChecking=no -o UserKnownHostsFile=~/dkl/known_hosts 192.168.1.2

Linux 批量添加 known_hosts,linux,Linux,ssh文章来源地址https://www.toymoban.com/news/detail-798063.html

到了这里,关于Linux 批量添加 known_hosts的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信ipad实现批量添加联系人及批量分组

    小提示: 添加联系人必要接口 搜索返回的V3 V4用于添加联系人 请求URL: http://域名地址/api/contacts/search 请求方式: POST 请求头: Content-Type:application/json X-GEWE-TOKEN: 后台获取 参数: 参数名 必填 数据类型 说明 appid 是 string 设备id user_name 是 string 搜索的手机号/微信号 返回数据

    2024年02月13日
    浏览(41)
  • Mysql表批量添加字段

    在 MySQL 中,可以使用  ALTER TABLE  语句来添加表字段。以下是一些示例代码,可以批量添加多个字段: 1 mysql表批量添加字段 1.1 添加单个字段 其中,  table_name  是表名,  new_column_name  是新添加的字段名,  data_type  是新字段的数据类型,  default_value  是新字段的默认值,

    2024年02月09日
    浏览(36)
  • MyBatisPlus 批量添加

    一般来说,批量插入可以使用 MyBatisPlus 中 ServiceImpl 自带的方法 saveBatch 打开 sql 日志,application.yml 添加配置,mapper-locations 配置 mapper 路径 可以发现插入是在同一个 SqlSession,但并不是理想中的批量插入 它的插入算法我没有细究,但从日志观察可以看出它的插入条数是无序的

    2024年02月04日
    浏览(39)
  • shp 地图文件批量添加字段

    # -- coding:utf-8 -- import geopandas as gpd import os from osgeo import ogr # shp 文件批量添加字段 def addfeilds(filepath):     for filename in os.listdir(filepath):         print(filename)         if filename.endswith(\\\".shp\\\"):             try:                 driver = ogr.GetDriverByName(\\\'ESRI Shapefile\\\')              

    2024年02月08日
    浏览(39)
  • 文档批量添加文字,高效提升生产力

    从简单的记事本到复杂的项目报告,我们每天都在与各种文本文档打交道。但你是否曾为批量处理这些文档而感到烦恼?是否曾为重复、繁琐的操作而感到力不从心?今天,我要为大家介绍一款强大的软件——首助编辑高手,帮助您轻松解决这些问题,让您的生产力瞬间提升

    2024年01月20日
    浏览(31)
  • 基于python+selenium的自动批量添加

    场景 点击添加”新增“按钮,弹出”新增对话框“,输入各种数据,然后点击”确定“按钮,如此循环。数量多,这样操作累人。 selenium Selenium 是一个用于自动化 Web 浏览器操作的库,可以实现模拟点击、输入文本等操作。 代码实现 find_element 在 Selenium 中,find_element 方法用

    2024年02月07日
    浏览(23)
  • WPS JS宏示例-批量添加链接

    📢作者: 小小明-代码实体 📢博客主页:https://blog.csdn.net/as604049322 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 原始数据如下: 共1.2万多条数据,现在我们需要给来源网址添加可以点击到目标网址的链接,并通过HS编码生成详情页链接。 最终生成效果如下: 这个案例用P

    2024年02月05日
    浏览(31)
  • 视频的特效效果是怎么加的?可以批量添加吗

    经常逛自媒体平台的小伙伴不难发现,要想原创的短视频更有创造性,内容更丰富,给视频添加特效效果算是比较常用的一个方法了。今天小编要分享的可不只是单一地给视频添加特效这么简单,我要给大家分享如何才能快速地批量给视频素材添加特效效果,一起来看看操作

    2024年02月13日
    浏览(37)
  • ansible批量创建crontab文件并添加到定时任务

    Ansible 来修改 crontab 文件并添加计划任务。用于将你提供的 cron 行添加到特定用户的 crontab 中: 确保将 your_target_host 替换为目标主机的名称或 IP 地址,将 your_username 替换为要添加 cron 任务的用户的用户名。 运行此 Playbook 将使用 Ansible 在指定的用户的 crontab 中添加新的 cron 任

    2024年02月11日
    浏览(31)
  • 学习视频剪辑:批量添加srt字幕,让视频更生动

    随着社交媒体的普及,视频制作变得越来越重要。无论是记录生活,还是分享知识,视频都是一个非常有力的工具。但是,如何让您的视频更生动、更吸引人呢?通过学习视频剪辑,您可以使您的视频更具有吸引力。而在这些技巧中,批量添加SRT字幕是一个非常实用的方法。

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包