通过非标准端口进行 SSH 远程连接是一个非常常见且有效的安全措施,可以避免你的服务器被互联网上大量的自动化扫描脚本骚扰。
一、核心概念
SSH 连接的命令格式是:
ssh -p <端口号> <用户名>@<服务器IP或域名>
❗关键在于使用 -p (小写p) 参数来指定端口号。
二、服务端设置(在你要连接的机器上操作)
首先,你需要确保 SSH 服务端正在监听你指定的非标准端口。
1. 修改 SSH 服务端配置
配置文件通常位于 /etc/ssh/sshd_config。你需要使用 root 权限(如 sudo)来编辑它。
sudo nano /etc/ssh/sshd_config
找到关于 Port 的那一行。默认情况下,它可能是被注释掉的,并且默认使用 22 端口
# Port 22
取消注释,并添加你想要的端口号。 为了保险起见,建议保留 22 端口,并新增一个非标准端口。这样即使新端口配置失败,你还能通过默认的 22 端口连接上去修复。
Port 22
Port 2222 # 这是你新增的非标准端口,例如 2222
重要提示:
- 端口号范围是 1-65535。
- 1024 以下的端口通常需要 root 权限才能使用,建议选择 1024-65535 之间的端口,例如
2222,3522,48213等。 - 避免使用已知的常见服务端口,如 80(HTTP), 443(HTTPS), 21(FTP) 等。
2. 重启 SSH 服务
修改配置后,必须重启 SSH 服务才能使更改生效。
- 在 Ubuntu/Debian/CentOS 7+/Amazon Linux 2 等使用 systemd 的系统上:
sudo systemctl restart sshd
或
sudo systemctl restart ssh
3. 配置防火墙
这是非常关键的一步!如果你的服务器开启了防火墙(如 ufw, firewalld, iptables),你必须放行你新设置的 SSH 端口。如果你不放行端口,此时你又手贱输入了exit或者点击断开连接,那么此时等着你的就是回滚了,如果没打快照那将是绝杀。
使用 ufw (常见于 Ubuntu/Debian):
sudo ufw allow 2222
使用 firewalld (常见于 CentOS/RHEL/Fedora):
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
4. (可选但推荐)测试并移除旧端口
先保持当前会话不要断开,然后开启新对话,尝试用新端口连接,如果可以连接再去编辑/etc/ssh/sshd-config,删除port 22,重启ssh服务,关闭端口。
这样可以最大限度降低你被锁在服务器外的风险。
这让我想起来我刚开始租服务器的时候,就是把自己所在了外面,傻乎乎的执行了sudo ufw start
二、客户端的连接
方法 1:命令行直接指定
ssh -p 2222 username@remote_server_ip
方法 2:使用 SSH 配置文件(推荐,更方便)
在你的本地电脑上,可以编辑 ~/.ssh/config 文件(如果不存在就创建一个),为你的服务器创建一个别名和预设配置。
编辑配置文件:
nano ~/.ssh/config
添加内容:
Host myserver # 给你服务器起一个易记的别名
HostName 203.0.113.10 # 服务器的真实 IP 或域名
Port 2222 # 指定的非标准端口
User john # 登录用户名
保存后,你只需要输入一个简单的命令就可以连接了,它会自动使用配置文件中指定的端口和用户:
ssh myserver
Comments NOTHING