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 下如何显示行号

    Linux 下,使用 cat -n 或 nl 命令可显示文件

    2025年8月19日
    4900
  • 为什么90%的人工作效率低下?

    在Linux系统中,查看端口与进程的关联是系统管理、网络调试和安全审计的常见需求,以下是几种权威可靠的方法,均基于Linux原生工具,操作前请确保拥有sudo权限或root用户身份:使用 ss 命令(推荐)ss(Socket Statistics)是netstat的现代替代工具,执行效率更高,查看所有监听端口及……

    2025年7月8日
    7500
  • 如何快速上手Linux模拟器?

    Linux模拟器(如WSL、Cygwin、QEMU等)允许用户在Windows、macOS或其他系统上运行Linux环境,无需安装双系统或虚拟机,本教程以Windows平台为例,重点讲解最主流的WSL(Windows Subsystem for Linux),同时涵盖其他工具的基本用法,为什么使用Linux模拟……

    2025年6月24日
    7500
  • Linux如何快速查看文件夹大小?

    使用 du 命令(推荐)du(disk usage)是Linux核心工具,专为统计磁盘使用量设计,最权威且高效,基础用法:du -sh /path/to/directory-s:仅显示总大小(不递归显示子目录)-h:以易读格式显示(如KB、MB、GB)示例输出:8G /home/user/Documents进阶……

    2025年7月15日
    8000
  • Linux下如何正确执行Perl脚本?

    基础执行方法直接调用Perl解释器终端输入完整路径,使用perl命令执行:perl /home/user/scripts/myscript.pl优势:无需文件权限修改,适用于临时执行注意:路径需为绝对路径(如/home/…)或相对路径(如./script.pl)通过Shebang行执行在Perl文件首行添加……

    2025年7月4日
    8200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信