经常使用密码登录服务器,一方面密码输入麻烦,另一方面存在被爆破的可能性,所以我们从安全角度需要用证书登录
操作流程
1 、在一台 Linux 系统上输入 ssh-keygen -t rsa -b 4096 -C "备注证书信息"
得到你的一对证书(生成期间可以一路默认)
2 、打开用户文件夹,进入.ssh
文件夹,可以查看到新增了两个前缀为 id 的文件,其中 id_rsa
是客户端使用的 Global Key,而 id_rsa.pub
则为服务器对应的 Host Key
3 、你需要将 id_rsa.pub
添加到.ssh/authorized_keys
。如果第一次添加那么可以直接复制 id_rsa.pub 并重命名为 authorized_keys,然后配置此文件权限为 600 。
4 、创建一个新用户
5 、用户创建添加完毕后,编辑 sshd 设置,vi /etc/ssh/sshd_config
,修改如下配置(请自行视情况修改)
#修改 SSH 服务端端口号 Port 12345 #强制开启新版本 SSH Protocol 2 #禁止 root 用户登陆 PermitRootLogin no #手动允许指定用户 myuser 登录 AllowUsers myuser #允许使用证书作为验证 PubkeyAuthentication yes #允许使用密码登录 PasswordAuthentication yes #使用双重加密的方式认证 AuthenticationMethods publickey,password
6 、此时防火墙手动添加端口 (本例 22 改为 12345),重载防火墙配置,重启 ssh 服务端
vi /usr/lib/firewalld/services/ssh.xml
firewall-cmd --reload
systemctl restart sshd.service
7 、此时不要关闭窗口,新建一个 SSH 窗口连接服务器,仅当使用密码与证书两者一起的时候才能登录成功,而且测试 root 账户已经无法登录,才可以完全关闭原有 SSH 窗口
8 、赋予普通账户 sudo 权限,使其可以用 sudo
进行额外的操作
#手动允许指定用户 myuser 使用 sudo gpasswd -a myuser wheel #查看所有拥有 sudo 权限的用户 lid -g wheel
默认 Linux 自带 ssh 客户端,可以连接其他服务端,使用方法是 ssh -q 用户名 @公网 IP 地址
然后输入密码,而秘钥登录是 ssh -i 证书文件路径 用户名 @公用 IP 地址
。如果两者都使用则将命令合并一下即可。
参考文章:https://segmentfault.com/a/1190000004141370