#!/bin/bash # 服务器诊断脚本 SERVER_IP="115.190.235.230" SERVER_PORT="8006" SERVER_USER="root" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo -e "${BLUE}========================================${NC}" echo -e "${BLUE}服务器连接诊断工具${NC}" echo -e "${BLUE}========================================${NC}" # 1. 检查网络连通性 echo -e "\n${YELLOW}[1/6] 检查网络连通性...${NC}" ping -c 3 $SERVER_IP > /dev/null 2>&1 if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 服务器 ${SERVER_IP} 可以ping通${NC}" else echo -e "${RED}✗ 服务器 ${SERVER_IP} 无法ping通${NC}" echo -e "${YELLOW} 可能原因:服务器禁用了ICMP或网络不通${NC}" fi # 2. 检查端口开放状态 echo -e "\n${YELLOW}[2/6] 检查SSH端口 ${SERVER_PORT}...${NC}" # 尝试使用nc if command -v nc &> /dev/null; then timeout 5 nc -z $SERVER_IP $SERVER_PORT 2>/dev/null if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 端口 ${SERVER_PORT} 开放${NC}" else echo -e "${RED}✗ 端口 ${SERVER_PORT} 无法访问${NC}" echo -e "${YELLOW} 可能原因:${NC}" echo -e " 1. 端口号错误" echo -e " 2. 服务器防火墙阻止了该端口" echo -e " 3. SSH服务未运行" fi else echo -e "${YELLOW}⚠ nc命令未安装,跳过端口检查${NC}" fi # 3. 尝试SSH连接(显示详细信息) echo -e "\n${YELLOW}[3/6] 尝试SSH连接(详细模式)...${NC}" echo -e "${BLUE}执行命令: ssh -v -p ${SERVER_PORT} -o ConnectTimeout=10 ${SERVER_USER}@${SERVER_IP} 'echo test'${NC}" echo -e "${YELLOW}----------------------------------------${NC}" ssh -v -p $SERVER_PORT -o ConnectTimeout=10 $SERVER_USER@$SERVER_IP 'echo test' 2>&1 | head -20 SSH_RESULT=$? echo -e "${YELLOW}----------------------------------------${NC}" if [ $SSH_RESULT -eq 0 ]; then echo -e "${GREEN}✓ SSH连接成功${NC}" else echo -e "${RED}✗ SSH连接失败(退出码: ${SSH_RESULT})${NC}" fi # 4. 检查SSH密钥 echo -e "\n${YELLOW}[4/6] 检查SSH密钥...${NC}" if [ -f ~/.ssh/id_rsa ]; then echo -e "${GREEN}✓ SSH私钥存在: ~/.ssh/id_rsa${NC}" if [ -f ~/.ssh/id_rsa.pub ]; then echo -e "${GREEN}✓ SSH公钥存在: ~/.ssh/id_rsa.pub${NC}" echo -e "${BLUE}公钥内容:${NC}" cat ~/.ssh/id_rsa.pub fi else echo -e "${RED}✗ SSH密钥不存在${NC}" fi # 5. 检查SSH配置 echo -e "\n${YELLOW}[5/6] 检查本地SSH配置...${NC}" if [ -f ~/.ssh/config ]; then echo -e "${GREEN}✓ SSH配置文件存在${NC}" if grep -q "$SERVER_IP" ~/.ssh/config; then echo -e "${BLUE}相关配置:${NC}" grep -A 5 "$SERVER_IP" ~/.ssh/config fi else echo -e "${YELLOW}⚠ SSH配置文件不存在(这是正常的)${NC}" fi # 6. 提供解决方案 echo -e "\n${YELLOW}[6/6] 建议的解决方案...${NC}" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE}如果连接失败,请尝试以下步骤:${NC}" echo -e "${BLUE}========================================${NC}" echo -e "\n${YELLOW}1. 确认服务器信息:${NC}" echo -e " 服务器IP: ${SERVER_IP}" echo -e " SSH端口: ${SERVER_PORT}" echo -e " 用户名: ${SERVER_USER}" echo -e " ${BLUE}如果信息有误,请修改 deploy.sh 文件${NC}" echo -e "\n${YELLOW}2. 手动测试SSH连接:${NC}" echo -e " ${BLUE}ssh -p ${SERVER_PORT} ${SERVER_USER}@${SERVER_IP}${NC}" echo -e " 如果能成功连接,说明服务器配置正常" echo -e "\n${YELLOW}3. 常见端口号:${NC}" echo -e " - 默认SSH端口: 22" echo -e " - 你配置的端口: ${SERVER_PORT}" echo -e " ${BLUE}尝试: ssh -p 22 ${SERVER_USER}@${SERVER_IP}${NC}" echo -e "\n${YELLOW}4. 检查服务器防火墙:${NC}" echo -e " 登录服务器后执行:" echo -e " ${BLUE}# Ubuntu/Debian${NC}" echo -e " sudo ufw status" echo -e " sudo ufw allow ${SERVER_PORT}/tcp" echo -e " ${BLUE}# CentOS${NC}" echo -e " sudo firewall-cmd --list-all" echo -e " sudo firewall-cmd --permanent --add-port=${SERVER_PORT}/tcp" echo -e " sudo firewall-cmd --reload" echo -e "\n${YELLOW}5. 检查SSH服务状态:${NC}" echo -e " 登录服务器后执行:" echo -e " ${BLUE}sudo systemctl status sshd${NC}" echo -e " ${BLUE}sudo systemctl restart sshd${NC}" echo -e "\n${YELLOW}6. 如果使用云服务器:${NC}" echo -e " - 检查云服务商的安全组规则" echo -e " - 确保入站规则允许端口 ${SERVER_PORT}" echo -e " - 确保源IP设置为 0.0.0.0/0 或你的本地IP" echo -e "\n${BLUE}========================================${NC}" echo -e "${GREEN}诊断完成!${NC}" echo -e "${BLUE}========================================${NC}"