(目录)

服务器A要免密登录服务器B,步骤如下

生成密钥(A)

# 生成密钥 
ssh-keygen 
# 提示如下信息
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your public key has been saved in /root/.ssh/id_rsa.pub.

默认生成的公钥保存在/root/.ssh/id_rsa.pub文件中。

添加公钥(B)

将公钥添加到home目录下的.ssh/authorized_keys中,如果没有该文件,可以自己创建一个。注意权限要修改成600

touch .ssh/authorized_keys
chmod  600  .ssh/authorized_keys
cat id_rsa.pub >> .ssh/authorized_keys 

启动密钥验证(B)

vi /etc/ssh/sshd_config
修改以下内容
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
# 重启sshd服务
systemctl restart sshd.service

以上操作完成后,如果从A服务器无法直接ssh到B服务器,检查防火墙配置和ssh允许访问列表

检查防火墙(B)

检查ssh默认的22端口是否开放给A服务器

# 检查防火墙
firewall-cmd --list-all
# 开放防火墙22端口给A服务器(假设IP为192.168.1.100)
# 规则立即生效
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100/32"  port port="22" protocol="tcp" accept'
# 写入配置文件,防火墙重启后规则依旧生效
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100/32"  port port="22" protocol="tcp" accept' --per

设置允许ssh访问列表(B)

如果防火墙开放后依旧无法访问,还可以检查是否设置了允许ssh访问的列表

# 查看允许ssh访问列表明细
cat /etc/hosts.allow
# 如果不包含sshd:* 需要把A服务器单独添加到列表中

# 添加A服务器到允许ssh访问列表
echo "sshd: 192.168.1.100" >> /etc/hosts.allow