linux ssh如何实现增加访问端口
作者:AI专题精讲
Linux中SSH默认使用22端口,为了增强安全性或满足特定需求,可以通过修改SSH配置来增加或更改SSH访问端口,具体步骤包括修改SSH配置文件、增加或修改端口、保存并退出编辑器、更新防火墙规则、重启SSH服务、测试新端口以及(可选)禁用默认端口
在 Linux 系统中,SSH 默认使用 22 端口。
为了增强安全性或满足特定需求,可以通过修改 SSH 配置来增加或更改 SSH 访问端口。
以下是具体步骤:
1. 修改 SSH 配置文件
SSH 的配置文件通常位于 /etc/ssh/sshd_config。使用文本编辑器(如 vim 或 nano)打开该文件:
sudo vim /etc/ssh/sshd_config
2. 增加或修改端口
在配置文件中找到 Port 配置项。如果不存在,可以手动添加。例如,增加一个额外的端口 2222:
Port 22 Port 2222
- 可以同时指定多个端口,SSH 会监听所有指定的端口。
- 如果需要完全替换默认端口,可以将
Port 22注释掉或删除,只保留新端口。
3. 保存并退出编辑器
- 在
vim中,按Esc,然后输入:wq保存并退出。 - 在
nano中,按Ctrl + O保存,然后按Ctrl + X退出。
4. 更新防火墙规则
如果系统启用了防火墙(如 ufw 或 firewalld),需要允许新端口通过防火墙。
使用ufw(Ubuntu/Debian)
sudo ufw allow 2222/tcp sudo ufw reload
使用firewalld(CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
使用iptables
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT sudo service iptables save
5. 重启 SSH 服务
修改配置后,需要重启 SSH 服务使更改生效:
sudo systemctl restart sshd
6. 测试新端口
使用 ssh 命令测试新端口是否生效:
ssh username@your_server_ip -p 2222
- 将
username替换为你的用户名,your_server_ip替换为服务器 IP 地址。 - 如果连接成功,说明新端口配置正确。
7. (可选)禁用默认端口
如果希望完全禁用默认的 22 端口,可以在 SSH 配置文件中注释掉或删除 Port 22,然后重启 SSH 服务。
注意事项
- 备份配置文件:在修改前,建议备份 SSH 配置文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- 确保新端口未被占用:使用以下命令检查端口是否已被占用:
sudo netstat -tuln | grep 2222
- 防止锁定自己:在测试新端口之前,确保当前 SSH 会话不会断开,或者通过其他方式(如控制台)访问服务器,以防配置错误导致无法连接。
通过以上步骤,你可以成功增加或更改 SSH 访问端口,提升系统的安全性。
遇到问题1
修改ssh端口后,启动失败失败,报错error: Bind to port 2222 on :: failed: Permission denied.
(base) [root@node-01 wangzy-p]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2025-01-21 00:29:06 CST; 1s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 147506 (sshd)
Tasks: 1
Memory: 1.1M
CGroup: /system.slice/sshd.service
└─147506 /usr/sbin/sshd -D
Jan 21 00:29:06 node-01 systemd[1]: Starting OpenSSH server daemon...
Jan 21 00:29:06 node-01 sshd[147506]: /etc/ssh/sshd_config line 10: Deprecated option RSA...ion
Jan 21 00:29:06 node-01 sshd[147506]: Could not load host key: /etc/ssh/ssh_host_dsa_key
Jan 21 00:29:06 node-01 sshd[147506]: error: Bind to port 2222 on 0.0.0.0 failed: Permis...ed.
Jan 21 00:29:06 node-01 sshd[147506]: error: Bind to port 2222 on :: failed: Permission ...ed.
Jan 21 00:29:06 node-01 sshd[147506]: Server listening on 0.0.0.0 port 22.
解决方案:
iptables -F setenforce 0 systemctl restart sshd
这三行代码分别用于 清空防火墙规则、关闭 SELinux 的强制模式 和 重启 SSH 服务。以下是每行代码的详细解释:
iptables -F
- 作用:清空
iptables的所有防火墙规则。 - 解释:
iptables是 Linux 系统中用于管理网络流量(如防火墙规则)的工具。-F参数表示flush,即清空指定链(chain)中的所有规则。如果不指定链,默认清空所有链(如INPUT、OUTPUT、FORWARD等)。- 执行后,所有自定义的防火墙规则将被删除,系统将恢复到默认的允许所有流量的状态。
- 使用场景:
- 当需要快速清除所有防火墙规则时。
- 在调试网络问题时,排除防火墙规则的影响。
setenforce 0
- 作用:将 SELinux 的模式设置为 宽松模式(Permissive Mode)。
- 解释:
- SELinux(Security-Enhanced Linux)是 Linux 的一个安全模块,用于提供更严格的访问控制。
- SELinux 有三种模式:
- Enforcing:强制模式,所有违反策略的操作都会被阻止并记录。
- Permissive:宽松模式,违反策略的操作不会被阻止,但会记录日志。
- Disabled:完全禁用 SELinux。
setenforce 0将 SELinux 设置为宽松模式,允许所有操作,但仍会记录日志。
- 使用场景:
- 当 SELinux 阻止某些操作时,可以临时设置为宽松模式以排查问题。
- 在调试或测试环境中,避免 SELinux 的严格限制。
systemctl restart sshd
- 作用:重启 SSH 服务。
- 解释:
systemctl是 Linux 系统中用于管理系统服务的命令。sshd是 SSH 服务的名称,负责处理远程登录请求。restart参数表示重启服务(先停止,再启动)。- 执行后,SSH 服务会重新加载配置文件并重新启动。
- 使用场景:
- 修改 SSH 配置文件(如
/etc/ssh/sshd_config)后,需要重启服务使更改生效。 - 当 SSH 服务出现问题时,重启服务以恢复功能。
- 修改 SSH 配置文件(如
注意:
iptables -F会清空所有防火墙规则,可能导致系统暴露在网络中。建议在执行前备份规则,或确保系统处于安全环境中。setenforce 0是临时修改 SELinux 模式,重启系统后会恢复为原模式。如果需要永久修改,可以编辑/etc/selinux/config文件。systemctl restart sshd会中断当前的 SSH 连接。如果正在通过 SSH 操作服务器,建议使用systemctl reload sshd重新加载配置而不中断服务。
通过这三行代码,可以快速清空防火墙规则、关闭 SELinux 的强制模式并重启 SSH 服务,适用于调试或配置系统时的常见操作。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
