感谢大家一直以来对我博客中与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会因为权限过于开放而拒绝访问出于安全原因。

在连接服务器后,在主目录中检查以下内容:

  1. .ssh文件夹:权限700(我自己可读/写/执行)

  2. 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的世界很广阔。请继续学习下面的文章以了解如何自动化连接、管理文件以及集成更强大的安全工具。

📖 推荐阅读的深入指南

  1. SSH使用法:从命令编写到有用的选项彻底征服!

  2. SSH连接自动化的第一步:掌握config文件

  3. SSH反向端口转发:从外部接入内部的魔法(feat. -R选项)

  4. SSH keygen:为初学者准备的完美指南

  5. 无需终端,通过SSH管理服务器文件:利用SFTP和GUI文件浏览器!

  6. 保护Linux服务器的守护者,Fail2Ban


在下一篇文章中,我们将介绍许多人感到困惑的SSH Config文件,通过它可以在没有复杂选项的情况下,以一个单词连接到服务器,这在第2篇文章中有涉及。如果觉得有帮助,也请参考其他文章!