Linux 配置公私钥登录,禁止密码登录

为用户配置公私钥

以 a 登录 b为例

1、a&b机器验证ssh是否安装成功

ssh -v

若无安装,先安装ssh

2、在a机器生成公私钥

ssh-keygen -t rsa

此时在/home/当前用户/.ssh下会生成公私钥文件
公钥 id_rsa.pub
私钥 id_rsa

3、将公钥配置到b机器中

用ssh-copy-id将公钥复制到远程机器中

在 a 机器上执行

ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名字@192.168.x.xxx

注意: ssh-copy-id 将key写到远程机器的 ~/.ssh/authorized_keys 文件中

4、修改b机器文件权限:

authorized_keys 文件必须是600权限(也就是-rw——-)或者644

.ssh目录必须是700权限(也就是drwx——)

/home/work目录 必须是 755权限 即drwxr-xr-x

5、测试是否联通

第一次测试,会提示一个确认,选择yes回车,结果不用输入密码,登录成功!

禁止密码登录,允许秘钥登录配置

编辑 SSH 配置文件:

#在root权限下执行
vim /etc/ssh/sshd_config

1、配置允许公钥认证

找到以下几句,若没有不需要处理

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

去掉上面3行前面的#

2、禁止密码登录,禁止root账户登录

找到下面2行:

PasswordAuthentication yes
PermitRootLogin yes

# 修改为:

PasswordAuthentication no
PermitRootLogin no

3、添加允许登录的用户限制

AllowUsers deploy@(your-ip) deploy@(another-ip-if-any)

保存后重启SSH服务。

service sshd restart

在以上基础上,修改ssh的端口会更安全

注意

从 Ubuntu 22.04.1 LTS 开始,可能存在 /etc/ssh/sshd_config.d/50-cloud-init.conf 这个配置文件, 其中有一条配置 PasswordAuthentication yes,该配置文件会将 sshd_config 覆盖掉,导致 /etc/ssh/sshd_config 配置中的禁止密码登录无效。因此需要在 /etc/ssh/sshd_config.d/50-cloud-init.conf 文件中删除这一行配置。

/etc/ssh/sshd_config 中的参数是以第一个出现的为准,在文件开头 Include /etc/ssh/sshd_config.d/*.conf 所以后面再配置的 PasswordAuthentication 参数才无效了。