基本操作
环境:主机A root 用户 ;主机B root 用户 ;两主机都是A云的,CentOS 7.3
目标
主机A 通过SSH 连接主机B 无需输入密码,即通过SSH 的秘钥进行认证登录
简单流程
- 生成秘钥
# 一路enter
ssh-keygen -t rsa -C 'test ssh 无密码登录'
- 传输公钥到目标服务器,这里即主机B
# -i 指定公钥文件
ssh-copy-id -i ~/.ssh/id_rsa.pub root@[主机B的IP 地址]
# 执行完后会提示 让你测试ssh 例如 ssh 'root@[主机B的IP 地址]'
# 本次测试人品爆发了,直接执行 ssh 'root@[主机B的IP 地址]',一次成功了
来点不一样的
复杂秘钥
# -f 指定生成的文件及位置 -b 指定生成的秘钥长度 -t 加密规则 -C 描述性内容
ssh-keygen -f ~/.ssh/test_unpass_login -b 4096 -t rsa -C 'test ssh 无密码登录'
此时通过 ssh-copy-id 传输秘钥之后,测试SSH 会让我输入密码,不想输入密码啊(如果输入密码,我还折腾这一通,写这篇文章干嘛!睡觉它不香吗?!)
怎么办?修改了秘钥文件名称,那就要指定秘钥文件名称,这里包括路径也是可以修改的,不再赘述
# ssh 连接时 通过-i 指定秘钥
ssh -i ~/.ssh/test_unpass_login 'root@[主机B的IP 地址]'
-i 可以解决问题,但是不方便怎么办呢?!config,主机A 通过配制config 文件解决这个问题
config[1] [2] 内容如下:
Host test_ssh_unpass
HostName [主机B的IP 地址]
Port 22
User root
IdentityFile ~/.ssh/test_unpass_login
然后就可以通过如下命令进行访问:
# 等价于 ssh -i ~/.ssh/test_unpass_login -p 22 'root@[主机B的IP 地址]'
ssh test_ssh_unpass
Root 太危险?
root 用户太危险?怎么办?不用root 用户,创建新用户 主机A 创建ha,主机B创建hb [3]
组合拳
- 生成秘钥
- 传输秘钥
ssh-keygen -f ~/.ssh/test_unpass_login -b 4096 -t rsa -C 'test ssh 无密码登录'
ssh-copy-id -i ~/.ssh/test_unpass_login.pub hb@[主机B的IP 地址]
这样就可以不使用root 用户登录了?No, ssh-copy-id 传输秘钥这一步,你改成root@ip 试试。通过ssh -i 的方式还是可以使用主机B 的root 用户登录的,肿么办?还是config,不过此config不是彼config,config 文件区分客户端和服务端,之前的config 是客户端,这次要改的是服务端,因为主机B 在这里充当的就是SSH 的服务端的角色。
主机B sshd_config
# 改完不要忘记重启ssh 服务 service sshd restart
PermitRootLogin no
AllowUsers hb
到此结 DragonFangQy 2020.4.24