由于本机在实验室服务器已配置免密登录,故根据ssh返回内容判断当前端口状态
#!/bin/bash
# --- 请修改下面的变量 ---
SERVER_IP="xxx.xxx.xx.138" # 你的服务器IP (已根据你的日志填好)
SSH_USER="root" # 你的SSH用户名 (已根据你的日志填好)
START_PORT=49100 # 开始扫描的端口 (可以根据情况调整)
END_PORT=49200 # 结束扫描的端口 (可以根据情况调整)
TIMEOUT=1 # 每个端口连接的超时时间(秒)
echo "🚀 开始扫描服务器 ${SERVER_IP} 上的SSH端口..."
echo "范围: ${START_PORT} - ${END_PORT}"
echo "------------------------------------"
for port in $(seq ${START_PORT} ${END_PORT}); do
# 实时输出,让你知道脚本正在工作
echo -n "正在尝试端口: ${port}... "
# 执行SSH命令,并将标准错误输出捕获到变量中
# 2>&1 表示将标准错误(stderr)重定向到标准输出(stdout)
output=$(ssh -o ConnectTimeout=${TIMEOUT} -o BatchMode=yes -p ${port} ${SSH_USER}@${SERVER_IP} 'exit' 2>&1)
# 检查捕获到的输出内容
if [ $? -eq 0 ]; then
echo "✅ 连接成功!"
echo "--------------------------------------------------------"
echo "🎉 找到可用的SSH端口: ${port}"
echo "现在可以使用以下命令登录:"
echo "ssh -p ${port} ${SSH_USER}@${SERVER_IP}"
# break # 找到后立即退出循环
elif [[ "$output" == *"Permission denied"* ]]; then
# 如果错误信息包含 "Permission denied",说明找到了SSH服务
echo "✅ 找到SSH端口! (虽然登录被拒,但端口是开放的)"
elif [[ "$output" == *"Connection refused"* ]]; then
# 如果是 "Connection refused",说明端口是关闭的
echo "❌ 连接被拒 (端口关闭)"
elif [[ "$output" == *"timed out"* ]]; then
# 如果是超时,说明可能被防火墙DROP了
echo "⏳ 连接超时 (可能被防火墙过滤)"
else
# 其他未知情况
echo "🤔 未知响应"
fi
done
echo "扫描完成。"