ssh免密码登录的最佳实践(Ubuntu 16.4 + CentOs 6 中验证通过)

ubuntu 16.04 配置ssh免密登陆 本来要装Hadoop,三个结点,第一次用ubuntu 16.04 结果在配置ssh免密登陆的时候遇到了问题,本来是按照网上 随便搜的教程配置的,结果发现有问题,然后自己解决了 ,顺便记录一下。 ubuntu自带的源是有问题,可能是国外的源,再加上我这边的网确实不好,安装openssh-server出问题, 到57%这里就不行了,加载不动了,所以果断换源。 换源之前还是先备份一下之前的... 阅读详情

背景介绍

在进行Hadoop分布式的配置时,需要设置ssh免密码登录,网上有很多资料(度娘一搜一大堆),基本流程的介绍都是如下:

  1. ssh-keygen 生成密钥对
  2. 将 本机的 ~/.ssh/id_rsa.pub 文件通过scp拷贝到目标机,然后重定向追加(>>)到其 ~/.ssh/authorized_keys 中;
  3. 通过 ssh 连接即可(初次连接时需要输入 yes将目标机的fingerprint 加入 known_hosts)
  4. 类似方法操作需要连接的所有其他机器

虽然方式是对的,但如果按照这种做法,在需要配置的机器比较多时,工作量比较大(尤其是第4步),而且容易出错。

最佳实践

通过调查和总结,整理出批量设置多台机器ssh免密码登录的最佳实践方式。通过该方式,只需几乎纯自动化的脚本操作,即可短时间内配置好任意多台机器,大大节约时间和减少出现问题的可能性。而且掌握了相关的方法和原理后,可以非常方便的进行集群中的各种批量配置。


步骤如下

  1. 先在一台机器上(如准备用于 hadoop 的 master上),以root账号编辑一个包含需要配置的所有机器的 IP/机器名/别名的 对应文本(如 hadoop-hosts.txt ),其格式遵循 /etc/hosts 的语法:

    IP地址1   主机名    [别名1    [别名2]]

典型示例为:

  192.168.100.4    master     hadoop-1
  192.168.100.5    slave01    hadoop-2
  192.168.100.6    slave02    hadoop-3

采用这种语法,一方面是为了各个节点上的hadoop程序能够通过主机名互相访问(master, slavexx), 一方面又方便脚本的自动化处理(hadoop-xx), 如果需要布置的机器比较多,则序号位数可以增加,但保证连续即可。

注意:此时不直接编辑 /etc/hosts , 是为了方便后期脚本自动化处理


2.通过 shell 脚本中的 for 语法,将 hadoop-hosts.txt 的信息配置到集群中的所有主机上,保证各主机之间能通过主机名/别名的方式访问。依次执行以下几个命令即可。

  #将映射列表加入本机的 hosts 中,这样本机即可通过别名访问其他主机(为第二步的for做准备),这一步非常简单,不再详解
  cat hadoop-hosts.txt >> /etc/hosts

  #将 hadoop-hosts.txt 中的映射列表加入集群中的其他所有主机,使得所有主机之间都可通过别名/机器名访问 -- 这步比较复杂,后面详细解释
  for I in `seq 2 3`; do cat hadoop-hosts.txt | ssh root@hadoop-$I "cat >> /etc/hosts" ; done

要理解第二步的工作,需要了解以下背景知识:

  • shell 中的for语法(详情可通过 man sh 后搜索 “for command” 获得), 可以通过范围变量(此处为 I, 范围为 2~3,在实际环境配置中,结束值3可根据集群的大小自行进行设置) 重复执行指定的命令N次。注意 seq 2 3 两边的符号是 数字”1” 左边的 “`” 符,而不是单引号,表示使用其结果作为for 的变量范围。在实际运行中,”hadoop- I"中的 I 会依次被替换成 2, 3, 4…., 相当于表示了 hadoop-1, hadoop-2, … 等机器主机。
  • cat hadoop-hosts.txt | root@hadoop-$I “cat >> /etc/hosts” – 本步骤将 hadoop-hosts.txt 的内容列出并通过管道传给 ssh,在别名为 hadoop-xx 的机器上以root用户执行 cat 命令,将其追加到 /etc/hosts 文件中,这样就完成了远程机器的hosts文件配置。
  • 注意:在命令执行时,可能出现类似如下的提示信息:
  The authenticity of host 'hadoop-2 (192.168.100.5)' can't be established.
ECDSA key fingerprint is SHA256:w+6Ou6AjZvjAWg8QuQJvvmt1Q2qtXZiUvhj1pbf4JTg.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop-2,192.168.100.5' (ECDSA) to the list of known hosts.
root@hadoop-2's password: 

这是提示要求将目标机的指纹信息(fingerprint)加入本机上的 knownhosts, 这样以后不再提示,通常输入 yes 或直接回车即可。


3.ssh-keygen 生成私钥对,这一步没有什么特别的,通常在master所在机器上进行


4.将本机的公钥分发到集群中的其他机器,并加入 authorized_keys。

#也是很简单的一句命令即可完成本机到集群中所有机器的免密码登录配置
for I in `seq 3` ; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop-$I ;done

此处有两点需要注意:

  • seq 命令时只有一个参数,表示本次处理的机器是 hadoop-1 ~ hadoop-3(这样 hadoop-1 能够 ssh 到自生)
  • ssh-copy-id 是 openssh-client 中提供的辅助脚本,可以完成 ” 拷贝id_rsa.pub 文件到远程主机 => 检查并加入 authorized_keys 文件 => 设置文件权限 ” 等全部内容。如果执行时提示无此命令,执行 sudo apt install openssh-client 安装即可。

5.在网上很多介绍中,需要依次在各个节点上都生成独立的 id_rsa + id_rsa.pub 文件,重复加入 authorized_keys 文件中,不过最简单的配置方式就是将本机的 id_rsa 文件复制到集群中每台机器上,这样大家互联时使用相同的秘钥,公钥,就不用再独立配置了(注意:由于这样存在安全隐患,最好只在测试环境下使用,正式环境时还是使用独立的密钥对)。

#一个语句即可将私钥复制到集群所有机器,这样集群中的所有机器都可免密码互相访问
for I in `seq 3` ; do scp ~/.ssh/id_rsa root@hadoop-$I:~/.ssh/id_rsa ;done

#由于本机已经ssh过集群中所有的机器,其 known_hosts 文件,将其复制到集群中所有机器后,从其上再互联时不用再确认 "fingerprint"
for I in `seq 3` ; do scp ~/.ssh/known_hosts root@hadoop-$I:~/.ssh/known_hosts ;done

总结

1.前面的示例只是建立了各个主机之间 root 账号之间的免密码登录,为了安全起见,一般需要使用特殊的用户名(如 hadoop)来运行指定服务,甚至可以配置成不同名字的账号间自动登录(超过本篇文章的范畴,此处不讲,有机会时再分享吧)。

2.从前面的介绍可以知道,通过 for + ssh 远程命令 的方式,可以在集群中一次操作大量机器,大大提升效率和减少可能的问题,希望大家都能多研究。注意在测试脚本时,一定先本地测试好后,再通过 for 命令应用到大量机器上,以免出错后难以挽救。

补充脚本(创建并设置 hadoop 自动登录的脚本)

#在远程主机上创建 hadoop 用户
for I in `seq 3`; do ssh root@hadoop-$I 'useradd hadoop' ; done

#设置初始密码为 123456
for I in `seq 3`; do ssh root@hadoop-$I "echo 'password' | passwd --stdin hadoop" ;done

#将指定 id_rsa.pub+id_rsa 分发到集群中各主机上hadoop账号下,此处为了简单,直接使用了root的,但为了安全,不同账号最好用不同的密钥对
for I in `seq 3` ; do ssh-copy-id -i /root/.ssh/id_rsa.pub hadoop@hadoop-$I ;done
#
for I in `seq 3` ; do scp /root/.ssh/id_rsa hadoop@hadoop-$I:~/.ssh/id_rsa ;done
for I in `seq 3` ; do scp /root/known_hosts hadoop@hadoop-$I:~/.ssh/known_hosts ;done

#这样配置之后,理论上hadoop用户即可免密码互相访问,可通过如下命令验证(当即不提示输入密码也不报错即表示验证通过):
for I in `seq 3` ; do ssh hadoop@hadoop-$I "exit" ;done

补充信息

后期调查得知,更好的维护多台机器的方式是使用 dsh(Distributed Shell).

SSH协议深度解析:从密钥交换到主机验证的七层协商机制 SSH(Secure Shell)是一种端到端加密的网络协议,核心功能是构建安全隧道而非远程桌面。其工作原理涵盖TCP连接、协议版本协商、密钥交换(KEX)、主机密钥验证、用户认证、会话建立与端口转发等七个严格分层阶段。技术价值在于提供抗中间人攻击、支持多应用复用、可审计可配置的安全通信基础设施。典型应用场景包括VS Code Remote-SSH开发、Git over SSH代码托管、云服务器免密登录及跨网络服务隧道。理解`ssh-keygen`生成的非对称密钥本质与`known_hosts`的主机信任机 阅读详情

相关推荐

STC8H DMA 串口1全双工中断方式收发通讯C语言

串口1全双工中断方式收发通讯程序。 通过PC向MCU发送数据, MCU将收到的数据自动存入DMA空间. 当DMA空间存满设置大小的内容后,通过串口1的DMA自动发送功能把存储空间的数据原样返回. 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度。

czhaii的专栏 1466

Ubuntu上使用SSH连接到CentOS系统

将username替换为CentOS系统上的有效用户名,centos_ip_address替换为CentOS系统的实际IP地址。首次连接时,可能会询问是否要将CentOS系统添加到已知主机列表中,输入"yes"并按Enter确认。请注意,确保网络连接正常,并且CentOS系统的防火墙未阻止SSH流量(默认情况下,SSH使用端口22)。如果使用SSH密钥对进行连接,请确保你的公钥已经添加到CentOS系统的~/.ssh/authorized_keys文件中。记下CentOS系统的IP地址,以备后用。

m0_48096446的博客 964

多台树莓派(主机)通信

在做无人机实验时,有个任务需要 两台无人机 或 无人机与小车 进行通信。 由于我们飞机上用了树莓派,相当于一台电脑,索性选用Socket网络编程。 条件:树莓派、局域网(手机热点或路由器)。需要通信的两台树莓派接入同一个局域网。 如若现场没有网络,可将树莓派配置为无线路由器,发射wifi。网上很多教程,注意一点是树莓派需要先用网线接入路由器再配置。 发送数据: # -*- coding...

LNL_LNL的博客 7687

Ubuntu开启SSH免密登录

Ubuntu开启SSH免密登录

天雪浪子的博客 1万+

Camera(5)metadata

Metadata 是整个 Android camera 中类似于高楼大厦中的管道系统一样,贯穿了整个 Camera 的 Framework 和 vendor HAL。Metadata 里面包含了所有的控制、参数、返回值等等。Metadata分为Android原生的Metadata和芯片商或者用户自定义的Metadata,即Android Tag和Vendor Tag。Vendor Tag在Hal中定义,并在camx和chi目录中使用。

qq_55893245的博客 3052

ARM CMSIS DAP源码分析(二)

今天分析的是RDDI_DAP_GetARMRegs(DWORD *regs, DWORD *rfpu, ULONG64 mask)和RDDI_DAP_SetARMRegs(DWORD *regs, DWORD *rfpu, ULONG64 mask)这两个函数。 以RDDI_DAP_GetARMRegs(DWORD *regs, DWORD *rfpu, ULONG64 mask)为例,代码如下:

pengxiao618的专栏 7977

Linux学习笔记-Ubuntu系统下配置ssh免密访问,创建多用户免密访问

Ubuntu是linux系统,虽然他是支持界面化操作的,一般用来做服务器用,所以配置ssh可以比较安全的进行访问,也方便在其他地方访问服务器,轻松省事。一般服务器是被访问的,所以只要安装openssh-server即可,如果要安装客户端,将安装的内容改成openssh-client即可。若要配置git访问服务器,此处密钥对可使用rsa格式的,git for windows默认识别rsa密钥。切换到.ssh文件夹中,然后将公钥添加到公钥管理文件中。通常一般要访问的客户端保存私钥,服务端保存公钥。

向往的是:佛祖堂前的鱼,静静听禅。 6033

TCS34725颜色识别模块实战调校:从“一坨”例程到精准RGB

本文针对TCS34725颜色识别模块初始数据不准的问题,提供了从基础例程到精准调校的实战指南。核心在于通过白光校正与黑白光校正两种方法,补偿传感器偏差与环境光影响,将原始数据准确映射为标准RGB值。文章详细阐述了校准原理、操作步骤与代码实现,并分享了进阶调试技巧与避坑指南,帮助开发者显著提升颜色识别的准确性与项目可靠性。

weixin_29188043的博客 289

Ubuntu直接配置免密登录

免密登录

weixin_52061917的博客 7090

国科大学习资料--机器学习方法与应用(叶齐祥)-期末考试题整理

国科大学习资料–机器学习方法与应用-期末考试题整理 ============================================================================================================================================================================================ =======================================

无名何许人的博客 2852

《Autosar_BSW高阶配置》总目录_培训教程持续更新中...

目录 一、Autosar COM Module 二、Autosar BswM Module 三、Autosar EcuM Module 四、Autosar DCM Module 五、Autosar DEM Module 六、其它Module陆续推出 欢迎大家订阅《Autosar_BSW高阶配置》专栏(可以理解为是Autosar培训教程),该专栏每周至少更新一篇,一次订阅,不再二次收费,献上常用的案例和配置方法。下方整理了相关博文的链接(单击蓝色字体即可跳转),方便大家获取。 本专栏...

「汽车电子助手」的博客 4万+

Ubuntu18.04 取消开机密码 实现自动登录

因为要把Ubuntu设备作为服务器,实现开机自动运行服务程序,所以需要取消开机密码 实现自动登录。

Gavig的博客 8887

OTG原理讲解

摘要:USB OTG(On-The-Go)是USB 2.0的重要功能,允许设备在主机和从机间动态切换,实现设备间的直接通信。其核心机制是通过ID引脚电平判断角色:Micro-USB中接地为Host,悬空为Device;USB-C则通过CC引脚协商。电路设计需处理ID引脚连接和VBUS电源控制,MCU根据ID状态配置USB控制器模式。典型应用包括手机连接U盘、键盘等外设,极大扩展了移动设备的连接能力。

m0_49476241的博客 3219

Ubuntu设置SSH免密登录(不同于CentOS)

目录(?)[-] Ubuntu设置SSH免密登录不同于CentOS 遇到的坑解决办法 1 先删除之前的ssh2 生成免密3 免密登录本机 集群免密登录 1 第2个节点生成免密2 第3个节点生成免密3 分发公钥4 集群免密登录 Ubuntu设置SSH免密登录(不同于CentOS) 1.遇到的坑 之前一直在CentOS系统进行Hado

Mr.Sun 1654

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Linux】SSH 免密登录配置指南

这是一篇关于 SSH 免密登录配置的文章!

mm1234556的博客 718

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Hadoop集群SSH服务和免密码登录的配置

前言: SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在 应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的 协议。 在Hadoop集群或其他集群中广泛应用用,可用于机器之间免密码登录和执行脚本,如的Hadoop集群中 NameNo

ITYangs的博客 1万+

Centos7 配置ssh免密登陆以及遇到的问题

同样以Ubuntu为例,假设用户名为u: 1)确认已经连接上互联网,然后输入命令: sudo apt-get install ssh 2)配置为可以免密码登录本机。首先查看在u用户下是否存在.ssh文件夹(注意ssh前面有“.”,这是一个隐藏文件夹),输入命令: ls –a /home/u 一般来说,安装SSH时会自动在当前用户下创建这个隐藏文件夹,如果没有,可以手动创建一个。 接下来...

小小鸭脖的博客 2287

linux远程带密码,Linux上实现SSH免密码登陆远程服务器

0.说明平常使用SSH登陆远程服务器时,都需要使用输入密码,希望可以实现通过密钥登陆而免除输入密码,从而可以为以后实现批量自动部署主机做好准备。环境如下:IP地址操作系统服务器端10.0.0.128/24CentOS 6.5 x86客户端10.0.0.129/24Ubuntu 16.04 x861.客户端生成密钥对生成密钥对:查看生成的密钥对:linuxidc@linuxidc:~$ ls .ss...

weixin_31524201的博客 331

Linux-ssh的rsa认证登录配置

首先看一下实验环境: [root@localhost ~]# cat /proc/version #ip 192.168.254.130 Linux version 2.6.32-431.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)...

weixin_30782293的博客 1288

PT100温度测量:ADS122U04与PIC18F47K40组合实战

温度传感器是工业自动化和HVAC系统的关键组成部分,RTD(铂电阻)凭借高稳定性和线性度成为高精度测温的首选方案。RTD测温的核心原理是利用恒流源激励热电阻并测量其两端电压,再依据电阻-温度特性转换为温度值。然而实际工程中,导线电阻、自热效应、激励电流配置以及ADC的采样精度都会引入误差,因此需要科学设计模拟信号链。采用24位UART接口ADC(如ADS122U04)配合8位单片机(如PIC18F47K40),既能实现仪表级分辨率,又能通过3线制补偿和软件滤波压制干扰。这套组合广泛应用于恒温仓库、HVAC风

weixin_33811539的博客 347

Linux免密码登录设置

参考文档:https://blog.csdn.net/a237428367/article/details/50464153serverA 服务器的 usera 用户免密码登录 serverB 服务器的 userb用户。先使用usera 登录 serverA 服务器    [root@serverA ~]# su - usera     [usera@serverA ~]$ pwd     /ho...

shanvlang的博客 2144

Linux上实现ssh免密码登陆远程服务器

0.说明平常使用ssh登陆远程服务器时,都需要使用输入密码,希望可以实现通过密钥登陆而免除输入密码,从而可以为以后实现批量自动部署主机做好准备。环境如下:IP地址操作系统服务器端10.0.0.128/24CentOS 6.5 x86客户端10.0.0.129/24Ubuntu 16.04 x861.客户端生成密钥对生成密钥对:xpleaf@leaf:...

weixin_34355715的博客 109

CentOS的Hadoop集群配置(一)

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

Cody的笔记本 1万+

ubuntu18.10搭建Hadoop2.9.2伪分布式集群

第一步:安装jdk 这里我选择的是jdk1.8 去官网下载压缩包。下载链接如下: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html       我选择的是Linux 64位的 (系统是什么版本,多少位的就选择对应的),把接受的许可的勾选上 下载Hadoop安装包 ...

git1314的博客 2551

ssh反连

99.1.36.165是内网机器,198.211.30.26是外网机器,现在想实现外网反连内网。 RedHat、CentOS:所需安装包在http://rpm.pbone.net/上均可找到。 Ubuntu、Kali:apt-get直接安装。最好将OpenSSH升级到6.7: apt-get upgrade ssh 〇、ssh反连 ssh -v -NfR 2222:localhost

mvpboss1004的博客 602
上一篇: 命令行编辑XML的最佳实践(修改版xmlstarlet)
下一篇: 最简单的调试学习Hadoop Examples的方法
fishjam
博客等级 码龄23年 170粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值