摘要
—-
本文面向运维和开发人员,系统性地说明当使用 FinalShell 或其他 SSH 客户端连接 Linux 服务器时遇到“连接被拒绝(Connection refused)”的排查思路与可执行命令示例。涉及网络连通、端口监听、服务状态、防火墙与权限等常见原因,并提供客户端调试与服务器端日志检查路径。文中示例的主机地址、端口、用户名、文件名请务必替换为你的实际值;不要执行未经确认的破坏性操作。FinalShell 是常见的 SSH/SFTP 客户端,具体界面和版本可能略有差异,相关设置通常可在连接设置或选项中查找。

适用对象
—-

  • 使用 FinalShell、OpenSSH 或其他 SSH 客户端连接 Linux 服务器的运维人员与开发者。
  • 需要定位“Connection refused”或无法建立 TCP 连接场景的排错人员。
  • 希望掌握客户端调试命令与服务器端检查步骤的读者。

正文
—-

常见导致“连接被拒绝”的大类原因(思路先行)

“连接被拒绝”通常表示 TCP 层无法与目标端口建立连接(即对方主机上没有进程在该端口监听,或中间网络设备直接拒绝连接),常见原因包括:

  • SSH 服务未运行或监听端口被修改(如非 22 端口);
  • 服务器本地防火墙或云安全组阻断了端口;
  • 目标主机未能路由到(路由/网关问题);
  • 服务器仅监听特定地址或绑定错误的接口;
  • 客户端配置使用了错误端口或错误目标地址。

以上关于 SSH 服务与端口监听的描述与 sshd 配置相关,参考 OpenSSH sshd_config 文档,以及 SSH 协议架构说明。

第一步:从客户端验证 TCP 层连通性

在客户端(或 FinalShell 的网络测试工具)先确认能否到达目标主机的 TCP 端口。示例命令(请替换 HOST 和 PORT):

  • 使用 nc(若已安装):nc -zv HOST PORT
  • 使用 ssh 客户端的端口调试:ssh -vvv USER@HOST -p PORT(该命令会显示连接建立的 TCP/SSH 握手调试信息)。

如果这些测试显示 “Connection refused”,说明问题多半在服务器端没有监听该端口或中间被阻断;若显示超时(Connection timed out),则更可能是网络或防火墙问题。

第二步:确认服务器端 sshd 是否在运行与在哪个端口监听

在服务器端,以具有管理权限的账户执行(替换占位符):

  • 查看服务状态(systemd 系统):sudo systemctl status sshd
  • 检查哪些进程在监听:sudo ss -tlnp | grep ssh 或 sudo ss -tlnp | grep :PORT(替换 PORT)
  • 如果是较旧系统,可用 netstat:sudo netstat -tlnp | grep ssh

这些命令可以确认 sshd 是否运行、监听的端口与绑定地址;有关 sshd 配置项(Port、ListenAddress、Subsystem 等)请参考 sshd_config 手册。

若 sshd 未运行,可尝试有序启动:sudo systemctl start sshd(注意在生产环境重启服务前应确认不会中断关键任务)。若系统使用非 systemd 管理方式,请根据发行版使用相应服务管理命令。

第三步:检查服务器防火墙与云安全组

服务器可能通过 ufw、firewalld 或 iptables/nftables 等防火墙阻止连接,云主机还可被云控制台的安全组规则限制。常用查询命令(替换为你的环境):

  • Ubuntu ufw:sudo ufw status verbose
  • CentOS/RHEL firewalld:sudo firewall-cmd –list-all
  • iptables:sudo iptables -L -n –line-numbers 或 sudo nft list ruleset
  • 云提供商控制台:登录并检查放行的入站端口(例如是否允许你的 IP 从公网访问指定端口)。

如果防火墙阻塞,请根据公司策略添加最小必要的规则,而不是临时全部关闭防火墙;避免降低安全性。

第四步:查看服务器日志定位具体拒绝原因

服务器端 SSH 的认证和连接信息通常记录在系统日志中,路径视发行版而定(Ubuntu 常见 /var/log/auth.log,RHEL/CentOS 常见 /var/log/secure)。示例命令:

  • 实时查看日志:sudo tail -n 200 /var/log/auth.log 或 sudo journalctl -u sshd -e

查找与连接时间点对应的错误信息(如 “Connection closed by …”、“Connection refused” 或 “failed to bind” 等),这些日志能指示是权限问题、密钥问题、地址绑定问题或服务崩溃。

第五步:检查 SSH 配置与认证相关问题

  • 如使用非密码认证,确保 /home/USER/.ssh/authorized_keys 权限正确(通常目录 700、文件 600),否则 sshd 会拒绝密钥认证。示例检查命令:ls -ld /home/USER/.ssh; ls -l /home/USER/.ssh/authorized_keys(替换 USER)。
  • 检查 /etc/ssh/sshd_config 中的 Port、PermitRootLogin、PasswordAuthentication、Subsystem sftp 等项是否按预期配置,修改后需重启或重载 sshd 服务。
  • 如果 SFTP 在 FinalShell 中不能使用但 SSH 登录正常,可能是 sshd 的 Subsystem sftp 条目被注释或使用了内部 sftp-server 的路径异常,这需要在服务器端检查 sshd_config 并查看日志。

FinalShell(客户端)侧的检查要点

FinalShell 作为客户端支持 SSH 与 SFTP 功能,你可以在其连接设置中配置主机、端口、账号和密钥,也通常能看到 SFTP 浏览或隧道/端口转发选项,具体界面不同版本可能略有差异,相关说明可参阅产品说明与常见问题文档。常见客户端误配置包括使用了错误端口、键文件路径不当或没有启用密钥权限读取。若怀疑客户端问题,尝试用系统自带的 ssh 命令做同样的连接测试以排除客户端程序特异问题。

常见问题
—-
问:我在客户端看到“Connection refused”,但服务器上 sshd 显示在运行,怎么办?
答:请检查服务器是否在你试图连接的端口上监听(ss -tlnp | grep :PORT),并确认没有 localhost-only(127.0.0.1)绑定导致外部无法连接;同时确认防火墙未阻断该端口。

问:我能 ping 通服务器但 nc/ssh 显示超时或被拒绝,说明什么?
答:Ping 只是 ICMP 层可达性测试,不能代表 TCP 端口可达。超时更偏向网络或防火墙阻断,拒绝更偏向没有进程监听或主机主动拒绝连接。先用 nc 或 telnet 测试目标端口,然后在服务器端检查监听与防火墙规则。

问:FinalShell 中 SFTP 无法列目录,但 SSH 能登录,如何排查?
答:在服务器端检查 sshd_config 中的 Subsystem sftp 配置以及 sftp-server 是否存在;同时检查目标用户的权限和其 home/.ssh 文件权限。SFTP 问题常见于子系统路径错误或权限不当。

总结
—-
排查“SSH 连接被拒绝”需要按网络层到应用层逐层验证:先确认 TCP 层连通,再到服务器端确认 sshd 是否运行并监听正确端口,随后检查防火墙与云安全组,最后查看 sshd 日志与认证配置。使用 FinalShell 等客户端时,注意在连接设置中填写正确的主机、端口与认证方式,并可配合系统自带 ssh 的 -vvv 调试输出定位问题。有关 SSH 协议、客户端与服务端配置的规范与选项,请参阅 RFC 与 OpenSSH 手册,有关 FinalShell 的产品说明与常见问题请参考官方资料。

FinalShell声明:FinalShell站所有内容,资源,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。