开启SSH秘钥登录来增强Ubuntu 系统安全性
总有那么一批歹人,希望通过抓取别人的VPS或站点来作为“肉鸡”,用来发动非法攻击、渗透、代理机、挖矿或其他牟利目的,这些都是无法容忍的。他们会建立一大批自动化的攻击网络,一旦网络上有SSH端口暴露,他们的自动程序就会尝试各种办法进行登录,暴力破解密码或其他尝试,永无止尽。
最有效的防止这类SSH攻击的方式,就是完全禁止掉root账户密码远程登录。采用SSH秘钥登录更加安全,因为SSH秘钥验证基于非对称加密,只要私钥长度安全(目前为RSA4096或ECDSA),被“猜出密码”的几率非常小。
自从上次有了被入侵的经历的后,现在我的每个服务都会详细考量防火墙、WAF、授权访问等策略,来确保业务和数据的安全性。
使用SSH秘钥登录,以前也折腾过,部分云平台有更好的界面工具可以帮助用户实现连接,但我的一些服务器位于非云服务器的机房,这个是否就需要自己配置防火墙规则和开启SSH秘钥登录。
生成本地秘钥
我的本地电脑是Windows 11操作系统,通过打开PowerShell窗口,执行下列命令即可完成本地密钥对的创建。
ssh-keygen -t rsa -b 4096
提示保存位置时,直接回车确认,保存在默认位置。然后两次输入一个相同的私钥密码。(每次连接SSH都需要验证这个密码),不推荐空密码,这是最后一道保障,避免电脑上的秘钥被病毒访问或物理机被他人操作时出现非授权连接。
复制公钥到远程Ubuntu
如果你的电脑上安装有 ssh-copy-id命令,且可移植性,那么你可以使用下列命令进行远程Copy同步:
ssh-copy-id username@your_ubuntu_server_ip
手动复制
如果没有 ssh-copy-id 命令,则采用手动同步,使用下列命令查看本地公钥内容:
cat ~/.ssh/id_rsa.pub
echo "your_public_key_content_here" >> ~/.ssh/authorized_keys
然后继续在Ubuntu上执行下列命令,确保文件权限正确:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
测试登陆
上传完成公钥信息后,现在在Windows 11上测试是否可以采用SSH秘钥登录到远程Ubuntu服务器。
ssh username@your_ubuntu_server_ip_address
测试通过,当提示是否继续连接时,输入yes并回车,然后输入你的私钥密码进行认证。通过该窗口可以看见服务器上已经存在4457次失败登陆了,歹人从未停止疯狂试探。
关闭远程Root密码方式登录
我们现在需要关闭掉密码认证方式,仅开启SSH秘钥认证登录,让歹人无处入手。
编辑Ubuntu的SSH配置文件:
sudo nano /etc/ssh/sshd_config
确保以下几行前面没有#
却配置和下列相同:
PermitRootLogin yes
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
这里的配置说明:
- 允许Root远程登录
- 禁止采用密码登录
- 允许使用SSH秘钥验证登录
- SSH公钥保存文件为
.ssh/authorized_keys
然后保存,并重新启动ssh服务。
service sshd restart
service sshd status
至此我们已经完成了SSH远程登录保护设置,现在只有你的本机电脑且通过SSH秘钥验证才可以连接到远程Ubuntu服务器的SSH窗口。
忘记私钥密码或无法登陆
很遗憾,这种情况下你只可以通过服务器提供的VNC窗口或IPMI窗口远程连接服务器本地控制台进行操作,或者更好的方式向服务器提供商提交工单协助处理。
订阅者讨论