经常使用密码登录服务器,一方面密码输入麻烦,另一方面存在被爆破的可能性,所以我们从安全角度需要用证书登录
操作流程
1 、创建一个新用户,并以用户的身份敲击如下命令
2 、在一台 Linux 系统上输入 ssh-keygen -t rsa -b 4096 -C "备注证书信息" 得到得到你的一对证书(生成期间可以一路默认)(新版本可以考虑但命令需自拟 ssh-keygen -t ed25519 -C "备注证书信息")
3 、打开用户文件夹,进入.ssh 文件夹,可以查看到新增了两个前缀为 id 的文件,其中 id_rsa 是客户端使用的私钥 Private Key,而 id_rsa.pub 则为服务器对应的公钥 Public Key
4 、你需要将 id_rsa.pub 这个 公钥 Public Key 添加到 .ssh/authorized_keys 。如果第一次添加那么可以直接复制 id_rsa.pub 并重命名为 authorized_keys,然后配置此文件权限为 600,记得 ~/.ssh 和 authorized_keys 所属用户一定要和用户一致。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
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
#使用双重加密的方式认证
AuthenticationMethods publickey,password
6 、此时防火墙手动添加端口 (本例 22 改为 12345),重载防火墙配置,重启 ssh 服务端
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-port.xmlsed -i "s/22/12345/g" /etc/firewalld/services/ssh-port.xmlfirewall-cmd --add-service=ssh-port --permanentfirewall-cmd --reloadsystemctl restart sshd.service
7 、此时不要关闭窗口,新建一个 SSH 窗口连接服务器,仅当使用密码与证书两者一起的时候才能登录成功,而且测试 root 账户已经无法登录,才可以完全关闭原有 SSH 窗口
8 、赋予普通账户 sudo 权限,使其可以用 sudo 进行额外的操作
# CentOS 手动允许指定用户 myuser 使用 sudo
gpasswd -a myuser wheel
# Ubuntu 手动允许指定用户 myuser 使用 sudo
usermod -aG sudo myuser
#查看所有拥有 sudo 权限的用户
lid -g wheel
默认 Linux 自带 ssh 客户端,可以连接其他服务端,使用方法是 ssh -q 用户名 @公网 IP 地址 然后输入密码,而秘钥登录是 ssh -i 证书文件路径 用户名 @公用 IP 地址。如果两者都使用则将命令合并一下即可。
参考文章:https://segmentfault.com/a/1190000004141370