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)
酷番叔酷番叔
上一篇 16小时前
下一篇 16小时前

相关推荐

  • 掌握终端快捷键有多高效?

    在Linux操作系统中,熟练掌握常用快捷键能显著提升工作效率,减少对鼠标的依赖,尤其适合开发者、运维人员及高级用户,以下分类整理Linux环境中的核心快捷键,涵盖终端操作、桌面环境、文本编辑及系统管理场景,所有内容均基于官方文档和行业通用实践,确保准确性和实用性,终端是Linux的核心操作界面,这些快捷键适用于……

    2025年7月26日
    1400
  • linux的ftp如何启用

    Linux中,安装并配置FTP服务器(如vsftpd),然后启动服务即可启用FTP

    2025年8月14日
    1000
  • Linux环境下如何详细编译Java程序?步骤与方法有哪些?

    在Linux环境下进行Java程序的编译是Java开发的基础技能,掌握这一过程有助于理解Java代码从源文件到可执行程序的转化原理,本文将详细介绍Linux环境下编译Java程序的完整流程,包括JDK安装、环境变量配置、代码编写、编译命令使用、构建工具应用等内容,帮助读者系统掌握Java编译的核心操作,JDK的……

    1天前
    300
  • Linux环境下npm安装的正确步骤和注意事项有哪些?

    在Linux系统中安装npm(Node Package Manager)通常需要先安装Node.js,因为npm是Node.js的默认包管理器,随Node.js一起发布,以下是详细的安装步骤,涵盖主流Linux发行版的不同安装方法,以及常见问题的解决方案,安装前的环境准备在开始安装前,建议确认系统是否已存在No……

    2025年8月22日
    600
  • 如何将linux压缩成iso文件

    Linux系统中,可使用命令`mkisofs -o output.

    2025年8月18日
    800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信