感谢大家一直以来对我博客中与SSH相关的文章的喜爱。根据统计,很多人对SSH感兴趣,但似乎缺乏一份关于“从头到尾如何安全配置的综合指南”。
SSH(安全外壳)不仅仅是一个远程访问工具。对于开发者而言,它是服务器管理的生命线,而对于普通用户,它是一种强大的武器,可以让你随时随地访问自己的电脑。
今天,我将超越SSH的基本概念,整理出从实际操作员的角度必须遵循的安全设置和诀窍,教大家如何“正确”开始。
1. SSH是什么,为什么它是必需的?
SSH是Secure Shell的缩写,它是一种协议,允许你登录网络上的其他计算机、执行命令和传输文件。核心是'加密'。与传统的Telnet不同,所有通信内容都经过加密传输,因此即使有人在中间拦截数据,也无法得知内容。
-
开发者:在AWS、Azure等云服务器部署和管理中是必不可少的。
-
非开发者:能够安全地从外部控制家里的PC、NAS或树莓派等设备。
2. 服务器(远程)设置:安全的第一步
在服务器(远程)上安装openssh-server只是开始。刚安装后,使用默认设置非常不安全。
配置文件的位置在Linux系统中是/etc/ssh/sshd_config。我们需要修改该文件,以设置最低限度的安全防护措施。
修改配置文件:
sudo nano /etc/ssh/sshd_config
实践设置1:更改默认端口 (Port Change)
SSH在全球范围内使用22号端口。黑客的自动化机器人只针对22号端口进行攻击。仅仅更改端口号就可以避免超过90%的暴力攻击。
# Port 22 <-- 注释或删除
Port 22022 # 建议使用1024以后的任意端口号
实践设置2:禁用密码认证 (Password Authentication No)
密码总有被破解的风险。我们必须使用安全性更高的SSH Key(密钥)方式,在密钥设置完成后应该完全禁止密码登录。
PasswordAuthentication no
⚠️ 注意:此设置必须在确认SSH密钥访问正常后应用。否则,可能会完全阻碍服务器访问。
3. 本地(Client)设置:密钥(Key)生成和注册诀窍
现在是时候为我的PC(本地)生成连接服务器的钥匙了。从这里开始,需要一些熟练用户的诀窍。
诀窍1:生成可识别的密钥(-C选项)
在生成密钥时,不要仅仅输入ssh-keygen。之后很多密钥会使你难以区分它们的用途。请务必使用注释(Comment)选项。
# -t ed25519: 最新的加密方法 (速度和安全性优秀)
# -C: 在密钥文件末尾添加注释以帮助识别。
ssh-keygen -t ed25519 -C "my-macbook-pro-home-server-key"
生成的密钥将保存在~/.ssh/目录中。(id_ed25519:私钥,id_ed25519.pub:公钥)
诀窍2:最简单的密钥复制方法(ssh-copy-id)
你需要将生成的公钥(pub)注册到服务器上。可以通过一行命令完成,而无需复制和粘贴文本的麻烦。
# 语法:ssh-copy-id -i [公钥路径] [账号]@[服务器地址] -p [端口]
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100 -p 22022
# 如果是连接到DNS域名的服务器,可以直接输入DNS而不输入ip。你的路由器配置的DNS服务器会将其转换为ip。
ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@wonderland.com -p 22022
该命令会自动把我的公钥添加到服务器的~/.ssh/authorized_keys文件中。
诀窍3:手动注册时的注意事项(权限问题)
如果在无法使用ssh-copy-id的情况下需要手动注册,请注意文件权限(Permission)。SSH会因为权限过于开放而拒绝访问出于安全原因。
在连接服务器后,在主目录中检查以下内容:
-
.ssh文件夹:权限700(我自己可读/写/执行) -
authorized_keys文件:权限600(我自己可读/写)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
想了解Linux文件系统的权限更多信息,请点击这里进行详细了解!
4. 连接测试与下一步骤
所有准备完成后,尝试连接吧。由于更改了端口,需要使用-p选项。
ssh -p 22022 user@192.168.1.100
# 无论是局域网IP、广域网IP还是DNS域名,只要准确指向服务器即可。
如果不询问密码便能直接连接,则成功。现在在服务器的sshd_config中将PasswordAuthentication no设置完成安全防护。

现在,您已经建立了安全控制服务器的环境。但是SSH的世界很广阔。请继续学习下面的文章以了解如何自动化连接、管理文件以及集成更强大的安全工具。
📖 推荐阅读的深入指南
在下一篇文章中,我们将介绍许多人感到困惑的SSH Config文件,通过它可以在没有复杂选项的情况下,以一个单词连接到服务器,这在第2篇文章中有涉及。如果觉得有帮助,也请参考其他文章!
目前没有评论。