搜索什么?
- 搜索服务器/主机:在局域网或特定 IP 范围内,寻找正在运行 SSH 服务的机器。
- 搜索历史命令:在你自己电脑的命令历史记录中,查找过去使用过的 SSH 命令。
- 搜索配置文件:在
~/.ssh/config文件中,查找特定的 SSH 主机配置。 - 搜索日志文件:在服务器的
/var/log/auth.log(Debian/Ubuntu) 或/var/log/secure(CentOS/RHEL) 中,查找 SSH 登录成功或失败的记录。
搜索网络中的 SSH 服务器
如果你想在一个局域网或 IP 范围内找到哪些机器开启了 SSH 服务(通常是 22 端口)。

使用 nmap (最强大、最推荐)
nmap 是网络扫描的“瑞士军刀”,功能非常强大。
基本命令:
扫描整个本地 /24 网段,查找开放了 22 端口的设备。
nmap -p 22 192.168.1.0/24
更详细的命令: 显示开放端口的设备的主机名和服务版本信息。
nmap -p 22 --open -sV 192.168.1.0/24
-p 22: 指定扫描端口为 22。--open: 只显示端口状态为 "open" 的主机。-sV: 尝试确定端口上服务的版本信息。
示例输出:

Starting Nmap 7.92 ( https://nmap.org ) at 2025-10-27 10:30 CST
Nmap scan report for 192.168.1.10
Host is up (0.0020s latency).
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 00:11:22:AA:BB:CC (D-Link International)
Nmap scan report for 192.168.1.15
Host is up (0.0015s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1
MAC Address: 10:20:30:DD:EE:FF (Apple, Inc.)
从输出中可以看到,168.1.10 和 168.1.15 都开启了 SSH 服务。
使用 netcat (nc)
如果系统没有 nmap,可以使用 netcat 进行简单的端口探测。
# 扫描单个IP
nc -zvw3 192.168.1.10 22
# 扫描一个IP范围 (需要配合 for 循环)
for ip in {1..254}; do
nc -zvw3 192.168.1.$ip 22 && echo "Found SSH on 192.168.1.$ip"
done
-z: 扫描模式,不发送数据。-v: 详细模式。-w3: 设置超时时间为 3 秒。
搜索本地的 SSH 历史命令
如果你想快速回忆过去连接过哪个服务器,或者复制一个旧的 SSH 命令。
使用 history 命令
直接查看命令历史记录,然后使用 grep 过滤。

history | grep ssh
直接使用 grep 搜索历史文件
Bash 的历史记录通常存储在 ~/.bash_history 文件中,这种方法比 history | grep 更直接。
grep ssh ~/.bash_history
使用 Ctrl+R (交互式搜索)
这是最快、最便捷的方法之一。
- 在你的终端中,按下
Ctrl + R。 - 输入
ssh,你会看到最近使用过的包含ssh的命令。 - 按下
Enter直接执行,或者按左右箭头键将其复制到当前行进行修改。
搜索 SSH 配置文件 (~/.ssh/config)
当你有很多 SSH 主机配置时,可以通过别名快速查找。
假设你的 ~/.ssh/config 文件内容如下:
Host prod-server
HostName 203.0.113.10
User admin
Port 2222
Host staging-server
HostName 203.0.113.20
User deployer
Host github.com
User git
使用 grep 搜索
# 搜索包含 "Host" 的行,即所有主机别名 grep "^Host" ~/.ssh/config # 搜索包含特定关键字的配置 grep "User" ~/.ssh/config
使用 ssh 命令本身 (Tab 自动补全)
这是最实用的方法,当你使用 ssh 命令时,直接按 Tab 键,系统会自动列出 ~/.ssh/config 中定义的所有主机别名。
$ ssh st<TAB> # 系统会自动补全为 "staging-server" $ ssh staging-server
搜索 SSH 服务器日志文件
用于审计、排查登录问题(如被暴力破解)或监控服务器访问情况。
重要提示: 你需要拥有服务器的 root 或 sudo 权限才能查看这些日志。
在 Debian / Ubuntu 系统上
日志文件通常位于 /var/log/auth.log。
搜索所有成功的 SSH 登录:
grep "Accepted publickey" /var/log/auth.log # 或者 grep "Accepted password" /var/log/auth.log
搜索所有失败的 SSH 登录(通常是暴力破解):
grep "Failed password" /var/log/auth.log
按 IP 地址搜索:
grep "192.168.1.100" /var/log/auth.log
按用户名搜索:
grep "user" /var/log/auth.log
在 CentOS / RHEL / Rocky Linux 系统上
日志文件位于 /var/log/secure,命令与上面完全相同,只需替换文件路径即可。
grep "Failed password" /var/log/secure
更高级的日志分析工具
对于大型服务器,手动 grep 效率低下,可以使用 fail2ban 或 awk 等工具进行更复杂的分析。
使用 awk 统计失败尝试最多的 IP 地址:
# 在 Debian/Ubuntu 上
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
# 在 CentOS/RHEL 上
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
awk '{print $(NF-3)}': 提取倒数第3个字段,通常是 IP 地址。sort: 对 IP 地址进行排序。uniq -c: 合并重复的行,并统计次数。sort -nr: 按照数字降序排列,得到最可疑的 IP。
总结表格
| 搜索目标 | 命令/工具 | 说明 |
|---|---|---|
| 搜索网络 SSH 服务器 | nmap -p 22 --open 192.168.1.0/24 |
最强大,推荐使用。 |
| 搜索本地 SSH 历史记录 | grep ssh ~/.bash_history |
快速找到过去用过的命令。 |
| 搜索 SSH 配置文件 | grep "^Host" ~/.ssh/config 或 ssh <TAB> |
ssh <TAB> 是最便捷的自动补全方式。 |
| 搜索服务器登录日志 | grep "Failed password" /var/log/auth.log |
用于安全审计和排查问题。 |
