Linux 配置 SSH 免密钥登录
1-免密钥登陆原理
1.1-免密钥原理
- 使用一种被称为"公私钥"认证的方式来进行
SSH
登录。 - "公私钥"认证方式简单的解释:
- 首先在客户端上创建一对公私钥(公钥文件:
~/.ssh/id_rsa.pub
、 私钥文件:~/.ssh/id_rsa
)。 - 然后把公钥放到服务器上(
~/.ssh/authorized_keys
),自己保留好私钥。 - 当
ssh
登录时,ssh
程序会发送私钥去和服务器上的公钥做匹配,如果匹配成功就可以登录了。
- 首先在客户端上创建一对公私钥(公钥文件:
1.2-新手必读
- 配置免登录前,请确保网络环境可以连通。
- 免登录其实是在本机生成两把锁,一把所谓的公钥是放到要登录的那台服务器上的,其实是一串文本。**
- 被登录的服务器上只会有一个公钥文件,叫
authorized_keys
。如果被登录的服务器有多个客户端要连上来,就会把每个文本密钥存成一行。 - 客户端发送到服务器端的密钥文件一定要放到登录用户主目录的
~/.ssh
这个隐藏目录下。
比如用hadoop
用户登录,若hadoop
的主目录是/home/hadoop
,密钥文件一定是在/home/hadoop/.ssh/
下 。 - 如果直接将
authorized_keys
的文件从客户端通过scp
或者ssh-copy-id
方式发送到服务器端,会覆盖原来的文件,对其他用户有影响,所以发送时要进行改名后合并。
2-配置免密钥登陆
2.1-查询机器名称
cat /etc/hostname
2.2-查看网络连通性
vim /etc/hosts
# 在 hosts 中添加对机器名的解析
192.168.41.5 master
192.168.41.7 slave_01
192.168.41.9 slave_02
2.3-切换免密钥登录用户
su hadoop
2.4-生成密钥
ssh-keygen -t rsa
根据提示一直按Enter
键
生成的公钥和私钥,如下图:
# 公钥 私钥位于用户目录下 .ssh隐藏文件夹下
# 私钥:id_rsa;公钥:id_rsa.pub
ls ~/.ssh/
2.5-公钥追加到 authorized_key 文件
语法:ssh-copy-id
命令
# -i:指定公钥文件
# user:用户
# machine:ip 或 /etc/hosts中配置主机名
ssh-copy-id [-i [identity_file]] [user@]machine
将密钥发送到需要免密钥登录的机器上:
# machine的三种写法
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@192.168.41.5
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave_01
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@192.168.41.9
备注:
- 修改用户密码:
su root
—>passwd username
scp
命令:scp ~/.ssh/id_rsa.pub >> user@machine:~/.ssh/authorized_keys
cat
命令:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2.6-验证免秘钥登录
注意:免密钥用户hadoop
ssh 192.168.41.5
ssh slave_01
ssh 192.168.41.9
2.7-异常情况
若每次ssh
登陆时需要输入密码,跟没有配置免密登陆时一样情况。需要修改.ssh
文件夹访问权限为登陆用户。
假设无法登陆slave_01
的hadoop
用户,则需要在slave_01
执行以下命令:
chown hadoop: /home/hadoop/.ssh
chown hadoop: /home/hadoop/.ssh/*
chmod 700 /home/hadoop/.ssh
chmod 600 /home/hadoop/.ssh/*