跳到主要内容

服务器登录管理

小林
后端开发工程师, 专注Go开发、微服务和云原生

当我们从云服务商购买一台服务器后, 第一件要做的事就是进行登录管理, 加强服务器安全. 因为云服务器不同于我们本地的开发环境, 会直接暴露在公网环境下, 几乎每时每刻都在遭遇黑客的扫描、入侵的风险, 如果依然选择简单密码登录方式, 将很容易被别人暴力破解试出. 下面将介绍如何使用更安全的登录方式

hiking.png

在本地生成随机强密码

echo "@Aa$(openssl rand -base64 16)" | cut -c1-16
提示

用 openssl 生成随机的 16位 base64 字符并与 "@Aa" 拼接截取前 16位

root 账号重置密码

可以登录云服务商的控制台, 重置服务器 root 账号的密码为刚才产生的密码

复制 root 公钥到服务器

sshpass -p 'password' ssh-copy-id -i ./ssh/root.pub root@remote_host
  • password 改成自己的密码
  • ./ssh/root.pub 改成自己的公钥路径, 默认公钥路径在 ~/.ssh/id_rsa.pub
  • remote_host 改成自己的 IP 地址
  • 记得安装 sshpass, 命令 apt install sshpass

也可以直接登录服务器并修改 ~/.ssh/authorized_keys 文件, 将自己的公钥复制进去

校验 root 密钥登录

用 root 账号无密码登录到服务器

ssh -i ./ssh/root root@remote_host

成功登录服务器说明上面流程没有问题

禁止密码登录

用 root 账号登录服务器, 限制只能密钥登录, 提高安全性

在服务器上运行下面命令, 添加 sshd 配置

echo "PasswordAuthentication no" > /etc/ssh/sshd_config.d/disable-password-login.conf

重启 sshd

service sshd restart

在本地尝试使用密码登录, 提示错误说明禁止密码登录成功了

添加普通账号

添加账号, 根据交互输入信息

adduser user01

设置账号密码, 密码弱一点无所谓, 方便 sudo 输入, 安全性通过禁止密码登录保证

passwd user01
危险

注意添加账号这一步一定要在禁止密码登录之后执行, 否则会因为设置了弱密码存在服务器被攻破的可能

将普通账号公钥添加到服务器

建议在本地为 user01 另外生成密钥对, 密钥生成可参考我这篇文章 生成 RSA 密钥对

将 user01 账号的公钥添加到 /home/user01/.ssh/authorized_keys

vim /home/user01/.ssh/authorized_keys
注意

注意这里的路径目录为 /home/user01, 不同于 root 账号的目录为 /root

普通账号登录

尝试用 user01 账号登录服务器

ssh -i ./ssh/user01 user01@remote_host
  • ./ssh/user01 为 user01 账号的私钥, 注意要有正确的文件权限

修改私钥文件权限命令如下

chmod 400 ./ssh/user01
提示

如果使用 wsl 并且私钥文件在 Windows 文件系统下有可能无法修改文件权限, 可以将文件复制 /tmp 路径下再修改, 当然, ssh连接时的私钥路径也得指定为新文件

禁止 root 账号登录

为进一步加强安全性, 可以禁止 root 账号登录

echo "PermitRootLogin no" > /etc/ssh/sshd_config.d/disable-root-login.conf

重启 sshd

service sshd restart

尝试用 root 账号无法登录服务器说明配置生效了