本文介绍如何优化 SSH 相关配置以提升安全性和日常使用体验。

更改 SSH 端口

默认 SSH 端口为22,容易被批量 SSH 恶意登录尝试波及,可更改为其它未被占用端口。

修改 /etc/ssh/sshd_config 以更改 SSH 端口

Port <端口>

重启 SSHD 服务

systemctl restart sshd

禁止 Root 用户登录

既然禁止 Root 用户登录,那么首先应该创建一个新用户用于登录和管理服务器。

useradd --create-home --shell /bin/bash --groups sudo <用户名>

有些 Linux 发行版没有 sudo 用户组,取而代之的是 wheel 用户组。

useradd 命令在不同 Linux 发行版可能有着不同的行为。详情请见这篇博文

设置新用户密码

passwd <用户名>

修改 /etc/ssh/sshd_config 以禁止 Root 用户登录

PermitRootLogin no

重启 SSHD 服务

systemctl restart sshd

开启 SSH-KEY 登录

生成密钥对(输入命令后一直回车即可)

ssh-keygen -t ed25519

请在本地计算机生成密钥对,保管好私钥。

Ed25519 在保证安全性的同时,密钥长度比 RSA 短很多。Ed25519 的安全性相当于 3072 位的 RSA。

上传公钥到服务器

ssh-copy-id -i ~/.ssh/id_ed25519.pub <用户名>@<服务器 IP>

请登出服务器使用新创建的用户再次登录服务器,此时应该无需提供密码,SSH 自动使用私钥登录服务器。

若已成功使用私钥登录服务器,即可进行后续步骤。

修改 /etc/ssh/sshd_config 以禁止使用密码登录

PasswordAuthentication no

重启 SSHD 服务

sudo systemctl restart sshd

设置别名

平常使用 ssh 命令时,总要输入一长串参数,而设置别名后,诸如 ssh -p <端口> <用户名>@<服务器 IP> 就可以用 ssh <别名> 替代。

设置别名可通过修改本地计算机以下文件之一实现:

  • /etc/ssh/ssh_config 应用于全局

  • ~/.ssh/config 仅应用于当前用户

~ 代表当前用户的家目录。

创建 ~/.ssh/config

touch ~/.ssh/config

~/.ssh/config 中添加以下内容:

Host    <别名>
    HostName        <服务器 IP>
    Port            <服务器 SSH 端口>
    User            <用户名>
    IdentityFile    ~/.ssh/id_ed25519
    IdentitiesOnly  yes

此时已可通过 ssh <别名> 登录服务器。

避免 SSH 连接自动断开

~/.ssh/config 中添加以下内容:

Host    *
    ServerAliveCountMax 5
    ServerAliveInterval 100

ServerAliveCountMaxServerAliveInterval 后的数值可根据自身体验适当调节。