为Linux开启密钥登录,增强安全性
零、快速脚本
下载脚本并赋予执行权限:
1 | wget https://raw.githubusercontent.com/meowprivacy/LinuxSH/refs/heads/main/pubkey_setup.sh && sudo chmod +x pubkey_setup.sh |
执行该脚本:
1 | bash pubkey_setup.sh |
菜单:
1.写入pubkey到执行用户authorized_keys
–1 追加写入
–2 覆盖写入
2.开启密钥登录(执行过程中询问是否禁用密码登录)
3.新机配置(输入pubkey、新端口号、是否开启密钥登录、是否禁用密码登录)
注意:
修改过SSH配置或公钥文件后,不要关闭当前连接,新开终端测试公钥登录,以免因配置修改失误导致无法登录SSH
为避免主配置被覆写,该脚本文件执行过程中会清空/etc/ssh/sshd_config.d目录下所有文件,如果为新机执行该脚本,则无需担心,如自定义过该目录下的配置,请不要使用该脚本
一、改动文件
~/.ssh/authorized_keys:储存用户ssh公钥
/etc/ssh/sshd_config:端口、公钥验证、密码登录、是否允许root用户登录
/etc/ssh/sshd_config.d/:sshd_config配置文件中include了该目录下的所有配置文件,该目录下的配置会覆写主配置文件,建议删除(如你在该目录下自行创建过配置文件,请注意保留)(请注意:该文章提供的快速脚本默认删除sshd_config.d目录下所有内容!)
二、生成SSH密钥
在系统命令行终端下(如powershell、git bash)执行:
1 | ssh-keygen -t ed25519 -C "ssh login key" |
如果你使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:
1 | ssh-keygen -t rsa -b 4096 -C "ssh login key" |
ssh login key
为密钥备注,可自定义
执行后会要求输入密钥保存位置(默认在~/.ssh目录下)、密钥口令、重复密钥口令(密钥口令留空为不设定密钥)
执行成功后打开~/.ssh/文件夹(Windows用户为C:\Users\用户名\.ssh\)
会有刚才透过命令行生成的私钥和公钥:id_ed25519和id_ed25519.pub(或:id_rsa和id_rsa.pub)
请妥善保管私钥,私钥用于登录SSH,类似于密码登录方式中的密码
三、导入pubkey到服务器
上一步生成的id_ed25519.pub或id_rsa.pub即为公钥文件,只有该文件导入到服务器相应档案中,其对应的私钥才会生效
查看当前使用者家目录下是否有.ssh目录和authorized_keys文件:
1 | ls -al ~/.ssh |
若没有,则创建该目录和文件并修改为正确的权限:
1 | mkdir -p ~/.ssh |
复制公钥文件中的内容,并导入到authorized_keys中:(pubkey content为你的公钥文件内容)
1 | echo "pubkey content" > ~/.ssh/authorized_keys |
如果要追加新的公钥,请使用下面的命令:
1 | echo -e "\npubkey content" >> ~/.ssh/authorized_keys |
修改/etc/ssh/sshd_config配置文件:
1 | sudo sed -i "s/^#\?\(Port\s*\).*/\1 新端口号/" /etc/ssh/sshd_config |
开启密码登录:(测试密钥登录成功后再禁用密码登录)
1 | sudo sed -i 's/^#\?\(PermitRootLogin\s*\).*/\1 yes/' /etc/ssh/sshd_config |
部分镜像安装后,/etc/ssh/sshd_config.d/目录中自带部分配置覆写了主配置,可能导致的问题如:
设定PasswordAuthentication值为no后,该修改不生效,原因是sshd_config主配置文件中include了sshd_config.d目录下的所有配置文件,建议检查目录内容后清空该目录:
1 | sudo rm -rf /etc/ssh/sshd_config.d/* |
然后,重启SSH服务:
1 | sudo systemctl restart sshd |
重启SSH服务后新配置生效,
修改过SSH配置或公钥文件后,不要关闭当前连接,新开终端测试公钥登录,以免因配置修改失误导致无法登录SSH
测试成功后,禁用密码登录:
1 | sudo sed -i 's/^#\?\(PermitRootLogin\s*\).*/\1 prohibit-password/' /etc/ssh/sshd_config |
四、常见问题
Q1:公钥认证失败
A1:vim ~/.ssh/authorized_keys
检查格式是否正确并修正错误
Q2:关闭密码登录不生效
A2:部分镜像安装后,/etc/ssh/sshd_config.d/目录中自带部分配置覆写了主配置,建议先检查目录内容后清空该目录:sudo rm -rf /etc/ssh/sshd_config.d/*
然后,重启SSH服务:sudo systemctl restart sshd
Q3:无权限执行sudo,或者sudo需要输入密码
A3:赋权(root下执行):usermod -aG sudo $USER
($USER为需要赋权的用户);设定无需密码执行sudo:sudo visudo
,找到%sudo ALL=(ALL:ALL) ALL
这行,修改为%sudo ALL=(ALL:ALL) NOPASSWD: ALL
(注意空格),然后CTRL+X保存
Q4:修改了sudo配置后,还是需要密码
A4:原因类似A2,sudo rm -rf /etc/sudoers.d/*
即可
为Linux开启密钥登录,增强安全性