如何相对安全地使用SSH

目前使用SSH固然是不建议开启密码登录的。而目前网络上能查到的基于证书的SSH登录,使用也十分不讲究。本文从安全以及实用的角度,对密钥SSH登录进行加固。

0x01 生成安全的密钥对

目前,网络上关于SSH密钥对生成教程,出于方便,一般都使用默认的rsa加密。这里,我们更加讲究地使用ecdsa来进行密钥对的生成。

ssh-keygen -t ecdsa -b 521

请注意,这里我们十分讲究地使用了521位加密(不是512!)。

生成完毕后,如果你在这里没有输入私钥的密码,我们会生成一个不带密码的私钥。这个不带密码的私钥虽然不安全,但是有其使用场景。例如。。。好吧我想不出来。那这里我们对他进行加密。

cp id_ecdsa id_ecdsa_encrypted
ssh-keygen -p -f id_ecdsa_encrypted

这样我们就可以生成一个新的私钥文件“id_ecdsa_encrypted”了。

0x02 上传公钥到服务器

非常简单,一行命令搞定上传。

ssh-copy-id -i id_ecdsa.pub {username}@{hostname}

此时,目标服务器如果还启用了密码验证的话,则需要输入密码。如果启用了证书,则必须确保证书在生成密钥的机器上可以正常被读到。(例如已经安装了rsa密钥,要更新ecdsa密钥)

0x03 加固sshd.service

在没有加固之前,相信你每次登陆ssh都有几万次login failed的提示。

这里我们对 /etc/ssh/sshd_config 文件进行一些关键字段的修改,来实现加固

Port 1234
StrictModes yes  #请确保~/.ssh/及其文件的文件权限正确
MaxAuthTries 3
MaxSessions 3
PubkeyAuthentication yes
PasswordAuthentication no
X11Forwarding no

PermitRootLogin no #请确保有低权限账号创建,能正常被ssh登陆,并加入了sudoer豪华午餐

大部分人应该一眼都能明白改的啥吧,不解释了。

 

“如何相对安全地使用SSH”的3个回复

  1. 不妨在服务器上安装一个 shadowsocks proxy 或者 VPN, 然后限定只有服务器本身的 IP 才能SSH登录。

    1. 思路很棒!我用了更成熟的方案,frp实现了这个特性。欢迎阅读:https://iam.lc/2020/05/frp-configuration.ping

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注