本人在学习大数据时,需要配置集群分布式环境,其中包括hadoop100到hadoop103共四台服务器,为方便管理,需要在本地(Mac OS系统)终端中登陆四台服务器,故配置了ssh免密登陆
1. SSH免密登陆原理
![](https://i-blog.csdnimg.cn/blog_migrate/3bd76efed704b5fd28f568800bac28cd.png)
2. 操作步骤
现在假设主机A要通过ssh免密登录主机B,步骤如下
# 两台机器最好都安装openssh-server / openssh-client
$ sudo apt install openssh-server
$ sudo apt install openssh-client
# 查看ssh服务是否开启
$ netstat -tlp | grep ssh
# 在主机A上通过RSA算法生成密钥对
$ ssh-keygen -t rsa # 此时在~/.ssh文件夹中生成了两个文件 id_rsa(私钥)和id_rsa.pub(公钥)
# 上传公钥到主机B的~/.ssh/authorized_keys
$ ssh-copy-id username@hostB
#(以下为可选内容)
# 配置服务器别名文件
$ vim ~/.ssh/config
~/.ssh/config
文件内容如下所示,其中
- Host:服务器别名【任意取】
- HostName:服务器IP地址 (此项目中通过VMware 的NAT得到)/ 主机名 / 域名【注意:如果是主机名/域名,则必须在
/etc/hosts
文件中写好对应的「ip-域名」映射关系】 - User:用户名称
- Port:SSH端口号
- IdentityFile:主机A(此例中为本地Macbook)的私钥文件
配置完成后,大功告成,在主机A的终端输入
$ ssh 服务器别名 # 如果没配置config文件,则是$ ssh username@hostB
如果出现警告:警告: setlocale: LC_CTYPE: 无法改变区域选项 (UTF-8)(warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory)
解决方法是在/etc/environment
加入如下代码,之后重新ssh登录即可
LC_ALL=zh_CN.UTF_8
LANG=zh_CN.UTF_8
3. ~/.ssh/ 目录下各文件的作用
id_rsa(私钥)
本机中通过RSA算法生成的私钥,与生成的公钥为一对。用于连接其他服务器
id_rsa.pub(公钥)
本机中通过RSA算法生成的公钥,与生成的私钥为一对。用于连接其他服务器
authorized_keys(授权文件)
记录了其他主机用于连接本机服务器的公钥,如果主机A的公钥在本机的authorized_keys
文件中,则主机A可免密登陆本机服务器
known_hosts
记录了本机访问过的主机的公钥。下次访问对应主机时,OpenSSH会核对公钥,不同则发出警告,避免受到DNS Hijack之类的攻击
config(配置文件)
非必需,一开始没有config
文件。它记录了ssh一些配置信息(主机别名/主机名或IP/用户名/SSH端口/IdentityFile),如果未配置config
文件,则ssh连接其他主机需要通过命令ssh username@hostB
,配置后,可直接ssh host