ssh无密登录原理
- Hadoop集群搭建时,配置ssh是给yarn用的,最好先清空.ssh目录下的文件,再生成密钥,在节点中含有resourcemanager的服务器(有多个resourcemanager的话可以只配置一个,集群里面可以共享通讯,但最好resourcemanager都配置ssh无密钥登录)生成ssh密钥,再ssh-copy-id 其他节点地址
注:私钥和公钥是每个用户独有的,而不是机器或者服务器的,比如一台电脑或者服务器或者虚拟机,可以同时存在多个用户,但不同用户需要远程登录其他服务器或者虚拟机时,都必须配置各自的私钥和公钥,而且用户之间的各不相同
常用命令
ssh ip(远程登录也可以是ssh hostname,条件是本机和远程机器都配置了hosts文件映射,如果没有配置ssh无密登录需要输入密码,对于集群管理和运作是很不方便的,多以需要在分布式集群的时候需要配置.ssh文件)
无密配置
- 进入家目录(/home/username),cd 然后直接回车
- 通过命令 ls-al 查看目录所有文件(包括隐藏文件,以点开头的文件)
- 进入.ssh目录
-
查看里面的内容。此时只有一个文件,因为此用户所在服务器(或者机器,虚拟机)没有被其他用户通过ssh免密登录访问过,也就是没有存放其他用户的公钥,如果有其他用户通过ssh免密访问此用户所在服务器(或者机器,虚拟机),此用户的服务器(或者机器,虚拟机)会在.ssh下生成一个文件名为known_hosts的文件,用来记录其他通过ssh访问过此用户所在服务器(或者机器,虚拟机)的计算机的公钥
1.未通过ssh访问其他用户:
注:authorized_keys翻译为授权码,作用是用来存放授权过的无密登录服务器公钥2.通过ssh访问其他用户:(文章最后解释此文件的来源)
- 执行命令 ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(该命令可参考:https://blog.csdn.net/microcosmv/article/details/62054835)
- 将公钥复制到需要免密登录的机器(服务器上),通过如下命令
ssh-copy-id 目标ip地址(最好给本机也copy一个,ssh-copy-id 本机ip或者主机名)(输入命令回车后需要输入目标ip的用户密码才能成功)
注:copy-id的时候另一台机器的用户必须在线(因为一台Linux机器可以存在多个用户,需要把公钥复制到对应的服务器中对应的用户目录下,则该用户必须在对应服务器中在线),即机器必须是开启的,否则出现以下情况:
该用户所在服务器(或者虚拟机,实体Linux机器)开启切该用户在线时候(用户在线即登录服务器后,没有切换成其他用户,可操作服务器的用户):
当需要复制公钥的用户在线时候,再通过命令复制公钥到对应用户的服务器的用户家目录下的隐藏文件.ssh里面的authorized_keys中(/home/用户/.ssh/authorized_keys)
- 主机hadoop1上的york用户通过ssh访问主机hadoop2上的york用户
1.访问前主机hadoop2上york用户的.ssh下面文件(未使用ssh命令连接前)
2.使用ssh连接后(连接成功)
3.使用exit命令可以退出远程免密登录
此过程是主机hadoop1上的york用户通过ssh命令访问主机hadoop2(这里的192.168.221.129)的york用户,访问之后会在使用ssh命令的用户目录下的.ssh文件下生成一个新的文件叫known_hosts(/home/用户名/.ssh/known_hosts),此文件用来记录使用ssh命令后(ssh 目标ip)把目标ip主机的信息记录下来。目标ip主机会如文章开始的原理图中那样,返回一个公钥加密的数据给使用ssh命令的用户,返回的数据包括目标ip主机的一些信息,如下
注:
- 1.配置ssh时候,作为namenode和resourcemanager的服务器需要配置ssh(即namenode和resourcemanager在同一台服务器上),即把该服务器的用户的公钥存储到其他所有节点ssh-copy-id
- 2.如果namenode和resourcemanager不在同一台服务器上,那么两台机器都需要配置ssh,即两台服务器都需要把各自用户的公钥储存到其他所有节点,因为启动HDFS使用bin/hdfs namenode -format 和 sbin/start-dfs.sh(可以不加bin和sbin,因为配置了环境变量的)和启动resourcemanager使用sbin/start-yarn.sh需要访问其他节点