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端口未被注释或禁用,使用文本编辑器(如vinano)打开配置文件:

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系统默认启用防火墙(如iptablesfirewalldufw),需手动开放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_configPort行是否被注释或格式错误(如多空格、特殊字符),若修改为非默认端口(如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

相关推荐

  • Linux日志查看有哪些高效技巧?

    核心日志位置Linux日志通常存储在 /var/log 目录:系统日志:/var/log/syslog(Debian/Ubuntu)或 /var/log/messages(RHEL/CentOS)认证日志:/var/log/auth.log(记录登录、sudo操作)内核日志:/var/log/kern.log应……

    2025年6月22日
    7500
  • linux 如何查看txt文件内容

    Linux 中,可以使用 cat、less 或 more 命令查看 txt 文件内容。

    2025年8月18日
    5600
  • Linux命令不会查?一键生成全攻略

    本指南系统讲解Linux指令的查询技巧与生成方法,涵盖常用命令、参数解析及自动化脚本编写,帮助用户高效解决实际问题,快速提升运维与开发效率。

    2025年8月7日
    6200
  • 修改前必须做哪些准备?

    在Linux系统中,内核引导参数是控制操作系统启动行为的关键配置项,它们用于调整硬件兼容性(如解决显卡驱动问题)、启用特定功能(如调试模式)、优化性能(如设置CPU调度策略)或修复启动故障,修改内核参数属于高级操作,错误修改可能导致系统无法启动,操作前务必备份重要数据,并谨慎执行每一步,查看当前引导参数系统启动……

    2025年7月16日
    7500
  • Linux系统下GitHub客户端的安装详细步骤是什么?

    在Linux环境下使用GitHub,核心是安装Git(版本控制工具)和GitHub CLI(命令行交互工具),前者是基础操作依赖,后者则简化了与GitHub平台的交互流程,本文将详细介绍不同Linux发行版的安装步骤、配置方法及注意事项,帮助用户顺利完成环境搭建,安装Git:GitHub操作的基础Git是分布式……

    2025年9月24日
    5100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信