chore: 同步知识库文档更新
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
22
docs/Obsidian笔记体系/Projects/claude code/claude连接腾讯云服务器.md
Normal file
22
docs/Obsidian笔记体系/Projects/claude code/claude连接腾讯云服务器.md
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
101.43.95.130 username:renjianbo port 22 密码123456
|
||||
|
||||
|
||||
|
||||
● 经历了以下步骤:
|
||||
|
||||
1. 直接用 ssh 命令 — 失败,因为缺少 sshpass 无法在命令行传入密码
|
||||
2. 检测到 Python 3.12 — WindowsApps 里的 python3 不可用,用了实际安装的 C:\Users\Administrator\AppData\Local\Programs\Python\Python312\python
|
||||
3. 安装 paramiko — pip install paramiko,Python 的 SSH 库 4. 用 paramiko 连接 — 脚本如下:
|
||||
|
||||
import paramiko
|
||||
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动接受主机密钥
|
||||
ssh.connect('101.43.95.130', port=22, username='renjianbo', password='123456', timeout=10)
|
||||
# 连接成功后执行命令
|
||||
stdin, stdout, stderr = ssh.exec_command('hostname && uname -a && uptime')
|
||||
print(stdout.read().decode())
|
||||
ssh.close()
|
||||
|
||||
关键点:paramiko 支持直接在代码里传入密码,绕过了 OpenSSH 客户端不支持命令行传密码的限制。
|
||||
@@ -2,3 +2,6 @@
|
||||
|
||||
知库项目D:\zhiku\mkdocs\docs 上传到git
|
||||
|
||||
|
||||
知库项目D:\workspace\mkdocs\docs上传到git
|
||||
|
||||
|
||||
8
docs/Obsidian笔记体系/Projects/命令工作台.md
Normal file
8
docs/Obsidian笔记体系/Projects/命令工作台.md
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
将问题修复的记录
|
||||
将记录输出到D:\workspace\mkdocs\docs\Obsidian笔记体系\Projects\故障排除记录
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
tags: [故障排除, 服务器, iptables, 网络]
|
||||
date: 2026-06-27
|
||||
server: 101.43.95.130
|
||||
---
|
||||
|
||||
# 云服务器 3001 端口无法访问
|
||||
|
||||
## 问题
|
||||
|
||||
浏览器无法访问 `http://101.43.95.130:3001/`(Gitea),腾讯云安全组已放行 3001 端口。
|
||||
|
||||
## 排查过程
|
||||
|
||||
### 1. 本地端口监听检查
|
||||
|
||||
```bash
|
||||
netstat -tlnp | grep 3001
|
||||
```
|
||||
|
||||
端口 3001 正常监听(docker-proxy),但 PID 需要 root 才能看到。
|
||||
|
||||
### 2. 服务可达性
|
||||
|
||||
```bash
|
||||
curl http://127.0.0.1:3001/ # 返回 200 ✓
|
||||
curl http://10.0.4.13:3001/ # 返回 200 ✓
|
||||
```
|
||||
|
||||
服务器本地访问正常,Gitea 运行在 Docker 容器 `gitea` 中。
|
||||
|
||||
### 3. 防火墙检查
|
||||
|
||||
```bash
|
||||
firewall-cmd --list-ports # 3001/tcp 在列表中 ✓
|
||||
iptables -L INPUT -n # IN_public_allow 允许 3001 ✓
|
||||
iptables -t nat -L DOCKER -n # DNAT 规则正确 ✓
|
||||
```
|
||||
|
||||
firewalld 和 iptables filter/NAT 规则都正确。
|
||||
|
||||
### 4. tcpdump 抓包
|
||||
|
||||
```bash
|
||||
tcpdump -i any -n port 3001
|
||||
```
|
||||
|
||||
外网 SYN 包到达服务器 `10.0.4.13:3001`,但服务器**没有回复 SYN-ACK**。说明包在到达服务前被静默丢弃。
|
||||
|
||||
### 5. 关键发现
|
||||
|
||||
`iptables -t nat -L PREROUTING -n -v` 显示 DNAT 规则只有 1 个包命中(52 bytes),但 `iptables -L FORWARD -n -v` 中没有包到达 172.19.0.3:3000 的 ACCEPT 规则。说明包在 PREROUTING 和 FORWARD 之间丢失。
|
||||
|
||||
## 根因
|
||||
|
||||
检查 **raw 表** `PREROUTING_direct` 链,发现端口 3001 有 IP 白名单:
|
||||
|
||||
| 规则 | 来源 | 动作 |
|
||||
|------|------|------|
|
||||
| 1 | 123.139.40.30 | ACCEPT |
|
||||
| 2 | 127.0.0.1 | ACCEPT |
|
||||
| 3 | 172.0.0.0/8 (Docker) | ACCEPT |
|
||||
| 4 | 所有其他 IP | DROP |
|
||||
|
||||
当前外网 IP `123.139.39.4` 不在白名单内,所有对 3001 端口的外部请求在 raw 表就被静默丢弃,根本走不到后续的 NAT/DNAT 环节。
|
||||
|
||||
> **raw 表是 iptables 处理流程的第一环**,DROP 的包不会经过 conntrack、nat、filter 等后续处理。
|
||||
|
||||
## 修复
|
||||
|
||||
将当前外网 IP `123.139.39.4` 加入 raw 表 `PREROUTING_direct` 链的白名单。
|
||||
|
||||
## 注意事项
|
||||
|
||||
- raw 表规则很可能是主机安全软件(云镜/主机安全)自动配置的
|
||||
- 服务器重启后可能被重置
|
||||
- 如需永久生效,应在安全软件控制台添加 IP 白名单
|
||||
|
||||
## 经验教训
|
||||
|
||||
1. 排查外网无法访问问题时,如果 firewalld/iptables filter/NAT 都正确,一定要检查 **raw 表**
|
||||
2. 对比工作端口(3006)和故障端口(3001)的差异,可以缩小排查范围
|
||||
3. `tcpdump` 看到 SYN 但无 SYN-ACK → 包被静默丢弃,检查 iptables 最前端
|
||||
Reference in New Issue
Block a user