Linux中如何打开22端口进行SSH连接?

在Linux系统中,端口22是SSH(Secure Shell)服务的默认端口,用于实现安全的远程登录和文件传输,打开22端口通常意味着配置SSH服务并确保端口未被防火墙或其他安全策略阻止,以下是详细的操作步骤,涵盖不同Linux发行版的服务安装、配置、防火墙设置及验证方法。

linux中如何打开22端口

检查当前端口状态

在操作前,首先确认22端口的当前状态,避免重复配置或遗漏问题,使用以下命令检查端口是否已被占用或开放:

  • 使用netstat命令(传统工具,需安装net-tools包):

    netstat -tuln | grep 22

    若返回类似tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN的结果,表示22端口已被SSH服务监听;若无输出,则SSH服务未启动或未配置监听22端口。

  • 使用ss命令(推荐,现代Linux系统默认自带):

    ss -tuln | grep 22

    ss命令是netstat的替代工具,输出更简洁高效,参数含义相同:-t显示TCP端口,-u显示UDP端口,-l只显示监听端口,-n以数字形式显示地址和端口。

安装SSH服务

若系统中未安装SSH服务,需先根据Linux发行版选择对应的安装命令,以下是常见发行版的安装方法:

发行版系列 包管理工具 安装命令 备注
Ubuntu/Debian apt sudo apt update && sudo apt install openssh-server 需确保apt源可用,安装后自动启动服务
CentOS/RHEL 7+ yum/dnf sudo yum install openssh-server(CentOS 7)
sudo dnf install openssh-server(RHEL 8+/CentOS 8+)
需root权限,dnf为新版包管理工具
Fedora dnf sudo dnf install openssh-server 同RHEL 8+
Arch Linux pacman sudo pacman -S openssh 需手动启动服务(systemctl start sshd)

安装完成后,可通过以下命令检查SSH服务状态:

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

若显示active (running),表示服务已启动;若未启动,使用sudo systemctl start sshd(或ssh)启动,并设置开机自启:

sudo systemctl enable sshd  # CentOS/RHEL/Fedora/Arch
sudo systemctl enable ssh   # Ubuntu/Debian

配置SSH服务监听22端口

SSH服务的配置文件位于/etc/ssh/sshd_config,需确保该文件中22端口未被注释或禁用,使用文本编辑器(如vi、nano)打开配置文件:

sudo vi /etc/ssh/sshd_config

检查以下关键参数:

linux中如何打开22端口

  1. Port 22:确保此行未被注释(即行首无),若需修改其他端口,可新增Port 端口号,但保留22端口或根据需求调整。
  2. ListenAddress 0.0.0.0:指定监听地址,0.0.0表示监听所有IPv4地址;若仅限IPv6,可改为。
  3. PermitRootLogin yes/no:控制root用户是否直接通过SSH登录(建议设为no,改用普通用户sudo提权)。
  4. PasswordAuthentication yes/no:是否允许密码认证(若使用SSH密钥,可设为no增强安全性)。

修改后保存文件,并重启SSH服务使配置生效:

sudo systemctl restart sshd  # CentOS/RHEL/Fedora/Arch
sudo systemctl restart ssh   # Ubuntu/Debian

配置防火墙开放22端口

Linux系统默认启用防火墙(如iptables、firewalld、ufw),需手动开放22端口允许流量通过,以下是常见防火墙的配置方法:

firewalld(CentOS 7+/RHEL 7+/Fedora默认)

# 检查防火墙状态
sudo firewall-cmd --state
# 永久开放22端口(TCP协议)
sudo firewall-cmd --permanent --add-port=22/tcp
# 重新加载防火墙规则使配置生效
sudo firewall-cmd --reload
# 验证22端口是否已开放
sudo firewall-cmd --list-ports | grep 22

ufw(Ubuntu/Debian默认)

# 检查ufw状态
sudo ufw status
# 开放22端口(可指定协议,默认为TCP)
sudo ufw allow 22
# 启用ufw(若未启用)
sudo ufw enable
# 验证规则
sudo ufw status verbose

iptables(传统防火墙,适用于CentOS 6及旧版Ubuntu)

# 开放22端口(TCP协议)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 保存规则(CentOS 6: service iptables save;Ubuntu: iptables-save > /etc/iptables/rules.v4)
sudo service iptables save  # CentOS 6
# 或
sudo iptables-save | sudo tee /etc/iptables/rules.v4  # Ubuntu
# 重启iptables服务
sudo service iptables restart
防火墙类型 开放22端口命令 永久生效方法
firewalld sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --reload
ufw sudo ufw allow 22 无需额外操作,ufw enable后自动保存
iptables sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT 保存规则(如service iptables save)

SELinux配置(仅限CentOS/RHEL)

若系统启用SELinux(安全增强型Linux),需确保SSH服务策略允许22端口通信,检查SELinux状态:

sestatus

若显示SELinux status: enabled,则需执行以下命令:

# 设置SSH端口策略为允许
sudo semanage port -a -t ssh_port_t -p tcp 22
# 若修改了非默认端口,需添加新端口(如2222)
sudo semanage port -a -t ssh_port_t -p tcp 2222

若未安装semanage工具,需先安装:

sudo yum install policycoreutils-python  # CentOS 7
sudo dnf install policycoreutils-python-utils  # RHEL 8+/CentOS 8+

验证22端口是否开放

完成上述配置后,通过以下方式验证22端口是否可正常访问:

  1. 本地测试:

    telnet localhost 22

    若显示Connected to localhost.及SSH服务 banner(如SSH-2.0-OpenSSH_8.2p1),表示端口开放成功。

  2. 远程测试:
    在另一台设备上执行:

    ssh -v 用户名@服务器IP

    -v参数显示详细连接过程,若成功建立连接,说明22端口及SSH服务配置正确。

    linux中如何打开22端口

  3. 使用nmap扫描(需安装nmap):

    nmap 服务器IP -p 22

    若显示open,表示端口开放;若显示filtered,则被防火墙或SELinux阻止,需检查上述配置步骤。

常见问题排查

若22端口仍无法访问,可检查以下问题:

  • SSH服务未启动:执行sudo systemctl start sshd并设置开机自启。
  • 防火墙规则未生效:确认防火墙服务已启动,且规则正确保存(如firewalld需--reload)。
  • SELinux阻止:临时关闭SELinux测试(sudo setenforce 0),若恢复正常,则需调整SELinux策略。
  • IP地址限制:若需限制特定IP访问22端口,可在防火墙规则中添加源地址限制(如firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept')。

相关问答FAQs

问题1:为什么修改了sshd_config中的Port参数后,SSH服务无法启动?
解答:通常是因为端口参数配置错误或与SELinux策略冲突,首先检查/etc/ssh/sshd_config中Port行是否被注释或格式错误(如多空格、特殊字符),若修改为非默认端口(如2222),需确保:

  1. 防火墙开放了新端口(如sudo firewall-cmd --permanent --add-port=2222/tcp);
  2. SELinux允许新端口(sudo semanage port -a -t ssh_port_t -p tcp 2222);
  3. 重启SSH服务(sudo systemctl restart sshd),若仍有问题,可通过journalctl -u sshd查看服务日志定位具体错误。

问题2:如何限制只有特定IP地址可以访问22端口?
解答:可通过防火墙规则实现IP访问控制,以firewalld为例,执行以下命令:

# 允许特定IP(192.168.1.100)访问22端口
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
# 禁止其他IP访问22端口(可选,需先拒绝默认规则)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="22" reject'
# 重新加载防火墙
sudo firewall-cmd --reload

对于ufw,可使用:

sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
sudo ufw deny 22

配置后,仅允许指定IP通过SSH连接服务器,其他IP访问22端口将被防火墙拦截。

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

赞 (0)
酷番叔酷番叔
上一篇 2025年10月6日 07:05
下一篇 2025年10月6日 07:20

相关推荐

  • 安装服务端失败怎么办?

    Telnet基础认知Telnet的作用Telnet是一种基于TCP/IP的远程登录协议(默认端口23),允许用户通过网络控制服务器,但请注意:Telnet传输数据为明文(包括密码),极易被截获,仅建议在内部安全环境或测试场景使用,生产环境强烈推荐SSH(加密协议)替代,服务端与客户端区分服务端:telnetd……

    2025年7月1日
    29100
  • 如何制作linux脚本

    Linux脚本需编写命令序列,以`#!

    2025年8月18日
    23400
  • Linux系统挂载硬盘的具体操作步骤与注意事项有哪些?

    在Linux系统中,挂载硬盘是将存储设备(如硬盘、U盘等)的文件系统关联到指定目录的过程,使用户能够通过目录访问设备中的数据,以下是详细的Linux硬盘挂载步骤及注意事项,涵盖从识别硬盘到配置自动挂载的全流程,识别硬盘设备挂载前需先确认系统中的硬盘设备及其分区信息,Linux中硬盘设备通常表示为/dev/sdX……

    2025年9月30日
    30000
  • Linux下如何彻底删除JDK并清理环境变量及残留配置?

    在Linux系统中删除JDK(Java Development Kit)是常见的系统维护操作,可能由于版本升级、环境冲突或不再需要Java开发环境等原因,删除JDK时,需根据安装方式(包管理器安装或手动解压安装)选择不同方法,并注意清理相关环境变量,避免残留文件影响系统,以下是详细的删除步骤和注意事项,删除前的……

    2025年10月4日
    59000
  • linux如何更改只读文件

    Linux 中,可使用 chmod 命令更改文件权限,如 `chmod

    2025年8月19日
    30100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信