Linux系统如何开启22端口以支持SSH远程连接?

在Linux系统中,端口22默认用于SSH(Secure Shell)服务,是远程管理服务器的核心通道,开启22端口通常涉及SSH服务的安装与配置、防火墙规则设置以及SELinux策略调整(若系统开启SELinux),以下将详细说明完整操作流程,涵盖主流Linux发行版(如CentOS/RHEL、Ubuntu/Debian)的差异处理,并附常见问题解答。

linux如何开启22端口

检查SSH服务状态与安装

SSH服务是开启22端口的前提,需先确认系统是否已安装并运行SSH服务。

检查SSH服务是否已安装

  • CentOS/RHEL系统
    使用rpmyum检查:

    rpm -qa | grep openssh-server  # 检查是否安装SSH服务端

    若未安装,输出为空;若已安装,会显示类似openssh-server-8.0p1-5.el8.x86_64的结果。

  • Ubuntu/Debian系统
    使用dpkg检查:

    dpkg -l | grep openssh-server  # 检查SSH服务端安装状态

    未安装时,第二列状态为ii的包名不会包含openssh-server

安装SSH服务

  • CentOS/RHEL系统(使用yum/dnf)

    sudo yum install openssh-server -y  # CentOS 7及以下
    # 或
    sudo dnf install openssh-server -y  # CentOS 8/RHEL 8及以上

    安装完成后,SSH服务端配置文件默认位于/etc/ssh/sshd_config

  • Ubuntu/Debian系统(使用apt)

    sudo apt update
    sudo apt install openssh-server -y

    安装后,配置文件路径同样为/etc/ssh/sshd_config,服务名为ssh(非sshd)。

启动并设置SSH服务开机自启

安装完成后,需启动SSH服务并配置开机自启,确保服务持续运行。

启动SSH服务

  • CentOS/RHEL系统
    sudo systemctl start sshd  # 启动SSH服务
  • Ubuntu/Debian系统
    sudo systemctl start ssh  # Ubuntu/Debian中服务名为ssh

设置开机自启

  • 通用方法(systemd系统)
    sudo systemctl enable sshd  # CentOS/RHEL
    sudo systemctl enable ssh   # Ubuntu/Debian

    执行后,可通过systemctl is-enabled sshd/ssh检查是否已设置为开机自启(输出为enabled即成功)。

    linux如何开启22端口

验证服务状态

sudo systemctl status sshd  # CentOS/RHEL
sudo systemctl status ssh   # Ubuntu/Debian

若服务正常运行,输出会显示active (running),且无错误信息。

配置防火墙允许22端口流量

Linux系统默认启用防火墙(如iptables、firewalld、ufw),需手动开放22端口,否则外部连接会被拒绝,根据发行版不同,防火墙工具有所差异:

CentOS/RHEL系统:使用firewalld(CentOS 7+)或iptables(CentOS 6及以下)

  • firewalld管理(CentOS 7/8/RHEL 7+)

    sudo firewall-cmd --permanent --add-port=22/tcp  # 永久开放22端口(TCP协议)
    sudo firewall-cmd --reload                      # 重新加载防火墙规则,使配置生效

    验证规则是否添加成功:

    sudo firewall-cmd --list-ports  # 查看已开放的端口,应显示22/tcp
  • iptables管理(CentOS 6或旧版系统)

    sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT  # 允许22端口TCP流量
    sudo service iptables save                          # 保存规则(CentOS 6)
    # 或
    sudo iptables-save > /etc/sysconfig/iptables       # 手动保存规则(适用于需要持久化的场景)

    查看已添加的规则:

    sudo iptables -L -n --line-numbers  # 列出规则,-n避免域名解析,--line-numbers显示行号

Ubuntu/Debian系统:使用ufw(默认)或iptables

  • ufw管理(Ubuntu/Debian默认)

    sudo ufw allow 22/tcp  # 开放22端口
    sudo ufw reload       # 重启ufw使规则生效(部分版本可省略,直接allow即生效)

    检查规则状态:

    sudo ufw status  # 输出应包含"22/tcp (ALLOW IN)"
  • iptables管理(手动配置时)
    操作与CentOS的iptables一致,需注意Ubuntu/Debian中iptables规则默认不自动保存,需通过iptables-persistent包实现持久化:

    sudo apt install iptables-persistent -y
    sudo netfilter-persistent save  # 保存规则

不同防火墙工具命令对比

操作 firewalld (CentOS 7+) iptables (通用) ufw (Ubuntu/Debian)
开放22端口 --add-port=22/tcp -I INPUT -p tcp --dport 22 allow 22/tcp
保存规则 --reload(临时)需手动持久化 service iptables save 无需手动保存(allow即持久)
查看已开放端口 --list-ports -L -n --line-numbers status
禁用22端口 --remove-port=22/tcp -D INPUT -p tcp --dport 22 deny 22/tcp

处理SELinux策略(仅CentOS/RHEL系统开启时)

若系统开启SELinux(默认为permissiveenforcing模式),可能阻止SSH服务监听22端口,需调整策略:

检查SELinux状态

sestatus  # 查看SELinux当前模式

输出中SELinux statusenabled表示已开启,Current modeenforcing为强制模式,permissive为警告模式(记录但不阻止)。

linux如何开启22端口

设置SELinux允许SSH网络连接

sudo setsebool -P sshd_can_network_connect on  # 允许SSH服务网络连接(-P表示永久生效)

若仍无法连接,可检查SELinux日志:

sudo grep sshd /var/log/audit/audit.log  # 查看是否有SELinux拒绝SSH的记录

若有类似avc: denied { name_bind }的记录,可通过semanage工具调整端口上下文:

sudo semanage port -a -t ssh_port_t -p tcp 22  # 将22端口添加为SSH端口类型

(需安装policycoreutils-python包,sudo yum install policycoreutils-python

测试SSH连接

完成上述配置后,可通过以下方式测试22端口是否开放且服务正常:

本地测试

ssh localhost  # 使用当前用户连接本地SSH服务

若提示Are you sure you want to continue connecting (yes/no)?,输入yes,再输入用户密码,登录成功则说明服务正常。

远程测试(使用另一台设备)

ssh username@server_ip  # 替换为服务器用户名和IP地址

若能成功登录,则22端口已开放;若连接超时或被拒绝,需检查防火墙规则、SSH服务状态及SELinux设置。

安全配置建议

开启22端口后,需注意以下安全措施,避免未授权访问:

  1. 禁用root直接登录:编辑/etc/ssh/sshd_config,设置PermitRootLogin no,重启SSH服务:
    sudo systemctl restart sshd/ssh
  2. 使用密钥认证:关闭密码登录,仅允许SSH密钥认证,提升安全性(编辑sshd_config,设置PasswordAuthentication no)。
  3. 修改默认端口:若无需使用22端口,可修改Port 2222(非特权端口需大于1024),并同步更新防火墙规则和SELinux策略。
  4. 限制访问IP:通过防火墙规则(如firewalld的--add-source=192.168.1.0/24)仅允许特定IP访问22端口。

相关问答FAQs

问题1:开启22端口后,使用SSH连接仍提示“Connection refused”怎么办?
解答:该错误通常表示SSH服务未启动或防火墙未正确开放端口,排查步骤如下:

  1. 检查SSH服务状态:sudo systemctl status sshd/ssh,确保服务为active (running);若未启动,执行sudo systemctl start sshd/ssh
  2. 检查防火墙规则:
    • CentOS/RHEL:sudo firewall-cmd --list-ports确认22/tcp是否在列;
    • Ubuntu/Debian:sudo ufw status确认是否允许22/tcp。
  3. 检查SELinux(CentOS/RHEL):sestatus确认是否为enforcing模式,尝试临时关闭sudo setenforce 0测试(关闭后需重启服务),若恢复正常,则需调整SELinux策略(如setsebool -P sshd_can_network_connect on)。
  4. 检查SSH服务监听端口:sudo ss -tulnp | grep ssh,确认是否监听22端口(若无,需检查/etc/ssh/sshd_configPort 22是否被注释)。

问题2:如何修改SSH默认端口(如改为2222)以提高安全性?
解答:修改SSH默认端口需同时调整配置文件、防火墙规则及SELinux策略(若开启),具体步骤如下:

  1. 编辑SSH配置文件:sudo vim /etc/ssh/sshd_config,找到Port 22,修改为Port 2222(若存在多个Port行,注释或删除旧配置,仅保留新端口)。
  2. 重启SSH服务:sudo systemctl restart sshd/ssh
  3. 更新防火墙规则:
    • firewalld:sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --remove-port=22/tcp(可选),然后reload
    • ufw:sudo ufw allow 2222/tcp && sudo ufw deny 22/tcp
    • iptables:sudo iptables -I INPUT -p tcp --dport 2222 -j ACCEPT,并删除22端口规则(iptables -D INPUT -p tcp --dport 22 -j ACCEPT),最后保存规则。
  4. 调整SELinux策略(CentOS/RHEL):sudo semanage port -a -t ssh_port_t -p tcp 2222,确保SELinux允许新端口。
  5. 测试连接:使用ssh username@server_ip -p 2222登录,成功后将防火墙规则设置为永久生效(如firewalld的--permanent),并关闭22端口访问(可选)。

注意:修改端口后,需确保客户端连接时使用-p参数指定新端口,否则会因端口不匹配而失败。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/19382.html

(0)
酷番叔酷番叔
上一篇 2025年8月29日 05:47
下一篇 2025年8月29日 06:00

相关推荐

  • Linux系统如何正确添加DNS服务器的配置步骤方法?

    在Linux系统中,DNS(域名系统)配置是网络连接的基础,它负责将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,正确的DNS配置能确保系统高效访问互联网、内网服务或特定资源,本文将详细介绍Linux系统中添加DNS的多种方法,涵盖不同发行版和场景,并附上注意事项和验证步骤,DN……

    2025年9月20日
    2300
  • 如何用linux黑手机

    议用Linux黑手机,这是违法行为且不道德。

    2025年8月19日
    4000
  • Linux磁盘I/O监控怎么做?

    核心命令行工具iostat(实时磁盘统计)功能:报告CPU和磁盘I/O的详细统计信息,安装:sudo apt-get install sysstat # Debian/Ubuntusudo yum install sysstat # CentOS/RHEL基础用法:iostat -dx 2 5 # 每2秒刷新1……

    2025年7月7日
    6000
  • Linux系统如何调整字体大小?具体方法有哪些?

    在Linux系统中,调整字体大小是提升使用体验的常见需求,但由于Linux发行版多样、桌面环境不同,调整方法也略有差异,本文将从桌面环境、终端、应用程序等多个场景出发,详细介绍如何改变Linux字体大小,帮助用户根据实际需求灵活操作,通过桌面环境调整字体大小(图形界面)不同桌面环境(如GNOME、KDE Pla……

    2025年10月6日
    1200
  • Linux开发板终端如何打开?

    在Linux环境下打开开发板终端是嵌入式开发中的基础操作,通常通过串口、网络(如SSH)或专用调试工具(如J-Link、ST-Link)实现,以下是具体操作步骤和注意事项,涵盖常见开发板类型(如树莓派、STM32、BeagleBone等)和连接方式,准备工作:硬件连接与工具安装在打开终端前,需确保硬件连接正确……

    2025年9月28日
    1100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信