摘要
—-
本文面向运维和开发人员,系统性地说明当使用 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 的产品说明与常见问题请参考官方资料。

评论(0)