Linux 机器之间免密登录设置
前言
ssh
命令用于远程登录上Linux主机。常用格式:
ssh [-l login_name] [-p port] [user@]hostname
操作系统
配置两台机器,操作系统都为:Centos7
,ip
设置为:
- Server A: 192.168.9.100
- Server B: 192.168.9.110
Linux 下生成密钥
查看ssh-keygen的命令手册,在命令窗口中通过 man ssh-keygen
命令:
通过命令 ssh-keygen -t rsa
,生成之后会在用户的根目录生成一个 .ssh
的文件夹
用户的根目录查看生成的 .ssh
文件夹
查看 .ssh
文件下生成的文件
- authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
- id_rsa:生成的私钥文件
- id_rsa.pub:生成的公钥文件
- know_hosts:已知的主机公钥清单
ssh免密登陆设置
免密码登录原理
图解,server A免登录到server B:
- 在
A
上生成公钥私钥。 - 将公钥拷贝给
server B
,要重命名成authorized_keys
(从英文名就知道含义了) Server A
向Server B
发送一个连接请求。Server B
得到Server A
的信息后,在authorized_key
中查找,如果有相应的用户名和IP
,则随机生成一个字符串,并用Server A
的公钥加密,发送给Server A
。Server A
得到Server B
发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B
。Server B
进行和生成的对比,如果一致,则允许免登录。- 得到
server B
发来的消息后,会使用私钥进行解析,然后将机密后的字符串发给server B
。 - 接收到机密后的字符串会跟先前生成的字符串进行对比,如果一致就允许免密登陆。
常用以下几种方法
总之:A 要免密码登录到 B,B 首先要拥有 A 的公钥,然后 B 要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。
通过ssh-copy-id的方式
- 命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub [romte_ip]
- 例如:
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.9.110
,如下图显示:
ssh-copy-id
命令可以把本地主机的公钥复制到远程主机的 authorized_keys
文件上,ssh-copy-id
命令也会给远程主机的用户主目录(home)和 /.ssh
, 和 /.ssh/authorized_keys
设置合适的权限。
手工复制粘贴的方式
- 拷贝本地主机的公钥到远程主机:
scp id_rsa.pub
- 将本地主机的公钥加到远程主机的授权列表
.ssh/authorized_keys
若不存在,手动创建:cat id_rsa.pub >> authorized_keys
.ssh
目录的权限必须是700
,chmod 700 .ssh
- 授权列表
authorized_keys
的权限必须是600
,chmod 600 authorized_keys