可以使用 ssh 的详细模式(-v)测试远程服务器上的某个端口,以替代 telnet,不过需要注意:

  • ssh 本身不是专门用来直接测试端口是否开放的工具,但可以通过一些间接方式验证端口可用性。
  • 以下是使用 ssh -v -p 测试端口是否可达的两种常用方法。

方法 1:尝试连接到目标端口

如果目标服务器上启用了 SSH 服务并监听指定的端口,可以直接尝试连接:

ssh -v -p <端口号> user@hostname

示例:

ssh -v -p 2222 user@192.168.1.1
  • 输出结果分析:
  • 如果端口开放但未运行 SSH 服务,会提示协议错误:
ssh_exchange_identification: Connection closed by remote host
  • 如果端口被防火墙阻挡或未开放,调试信息中会看到类似以下内容:
connect to address 192.168.1.1 port 2222: Connection refused
connect to address 192.168.1.1 port 2222: No route to host

方法 2:使用 ssh 的超时选项测试非 SSH 端口

对于非 SSH 服务的端口(如 HTTP、数据库等),可以使用 -o 配置超时,快速检查端口是否开放:

ssh -v -o "ConnectTimeout=5" -p <端口号> user@hostname

示例:

ssh -v -o "ConnectTimeout=5" -p 80 user@192.168.1.1
  • 效果:
  • 如果端口开放但未运行 SSH 服务,会提示协议错误:
ssh_exchange_identification: Connection closed by remote host
  • 如果端口被阻挡或关闭,会显示:
connect to address 192.168.1.1 port 80: Connection refused

方法 3:结合 nc (推荐补充)

如果目标并非 SSH 服务端口,建议直接使用 netcat (nc),更简单有效:

nc -zv hostname <端口号>

示例:

nc -zv 192.168.1.1 80
  • 输出会直接告诉你端口状态:
  • 成功:
    Connection to 192.168.1.1 80 port [tcp/http] succeeded! Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds.
  • 失败:
    Ncat: Version 7.50 ( https://nmap.org/ncat )Connection refused

注意事项

  1. 权限要求
  • ssh 测试时需要目标服务器允许建立连接,但不需要实际登录。
  • 对于非 SSH 服务,ssh 仅能检查端口是否可达,不能验证服务状态。
  1. 防火墙和网络限制
  • 如果有防火墙规则或网络路由限制,端口测试可能失败,但并不一定表示服务不可用。
  1. 替代工具
  • 如果是专门测试端口连通性,推荐使用 nctelnet,它们更适合这个场景。