131 lines
4.7 KiB
Bash
Executable File
131 lines
4.7 KiB
Bash
Executable File
#!/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}"
|