TiDB dashboard With Grafana v5.x or later, we can use provisioning feature to statically provision datasources and dashboards. No need to use scripts to configure Grafana.

阅读全文 »

Camunda

AI

这里包含了 AI 相关的所有文档,包括:

核心内容

  • 提示工程: Prompt 编写和优化
  • 模型应用: 各类 AI 模型的应用实践
  • 工具集成: AI 工具链的集成方案
  • 最佳实践: AI 应用的最佳实践指南

资料

这里包含了资料相关的所有文档。

Prompts

ssh -w要怎么使用ssh config配置文件配置, 以及它有哪些参数

以下是关于如何在 SSH 配置文件中使用 -w 参数(隧道设备转发)的详细说明,包括参数解释和配置示例:


1. ssh -w 参数的作用与语法

  • 功能:创建 TUN/TAP 虚拟网络接口,实现网络层(L3)或数据链路层(L2)的隧道。
  • 语法
    1
    ssh -w <local_tun>:<remote_tun> user@host
    • <local_tun>:本地 TUN 设备编号(如 0 表示 tun0)。
    • <remote_tun>:远程 TUN 设备编号(如 0 表示 tun0)。
    • 特殊值 any:允许系统自动分配设备号(如 -w 5:any)。

2. SSH 配置文件中的 Tunnel 指令

~/.ssh/config 中,使用 Tunnel 参数配置隧道设备:

1
2
3
4
5
6
7
8
9
10
11
12
Host my-tunnel-host
HostName remote-server.com
User root
# 隧道设备配置
Tunnel 0:0 # 等价于命令行 -w 0:0
TunnelDevice 0:0 # (可选)显式指定设备号
# 其他必要参数
IdentityFile ~/.ssh/id_rsa
PermitLocalCommand yes
# 保持连接活跃
ServerAliveInterval 60
ServerAliveCountMax 3

关键参数说明

参数 作用
Tunnel 指定本地和远程的 TUN 设备号,格式为 <local>:<remote>(如 0:0)。
TunnelDevice (部分版本支持)显式绑定到具体设备号,与 Tunnel 类似。
PermitTunnel 需在服务端 sshd_config 中设置为 yes,否则隧道无法建立(见下文)。
PermitLocalCommand 允许在本地执行命令(如自动配置 IP 地址)。

3. 服务端配置(必需)

在远程服务器的 /etc/ssh/sshd_config 中启用隧道支持:

1
PermitTunnel yes    # 允许 TUN/TAP 隧道

重启 SSH 服务生效:

1
sudo systemctl restart sshd

4. 使用步骤示例

(1) 建立 SSH 隧道

1
ssh -w 0:0 root@remote-server.com

(2) 配置虚拟接口 IP 地址

  • 本地
    1
    2
    sudo ip addr add 10.0.0.1/24 dev tun0
    sudo ip link set tun0 up
  • 远程
    1
    2
    sudo ip addr add 10.0.0.2/24 dev tun0
    sudo ip link set tun0 up

(3) 测试连通性

1
ping 10.0.0.2  # 从本地 ping 远程隧道 IP

5. 高级用法:自动化配置

在 SSH 配置文件中添加 LocalCommand,自动完成 IP 分配:

1
2
3
4
5
6
Host my-tunnel-host
HostName remote-server.com
User root
Tunnel 0:0
PermitLocalCommand yes
LocalCommand sudo ip addr add 10.0.0.1/24 dev tun0 && sudo ip link set tun0 up

6. 常见问题与注意事项

  1. 权限问题

    • 需要 root 权限创建 TUN/TAP 设备,建议以 sudo 运行 SSH 命令。
    • 如果使用普通用户,需配置 CAP_NET_ADMIN 权限:
      1
      sudo setcap cap_net_admin=ep /usr/bin/ssh
  2. 操作系统支持

    • Linux:原生支持 TUN/TAP。
    • macOS:需安装 TUN/TAP 驱动
    • Windows:需安装 OpenVPN 的 tap-windows 驱动。
  3. 协议选择

    • TUN 模式(默认):传输 IP 数据包(L3)。
    • TAP 模式:传输以太网帧(L2),需显式指定:
      1
      ssh -o Tunnel=ethernet -w 0:0 user@host

7. 完整配置示例

1
2
3
4
5
6
7
8
9
10
11
# ~/.ssh/config
Host vpn-tunnel
HostName vpn.example.com
User root
IdentityFile ~/.ssh/vpn_key
Tunnel 0:0
PermitLocalCommand yes
LocalCommand sudo ip addr add 10.0.0.1/24 dev tun0 && sudo ip link set tun0 up
RemoteCommand sudo ip addr add 10.0.0.2/24 dev tun0 && sudo ip link set tun0 up
ServerAliveInterval 30
RequestTTY yes # 允许执行远程命令(RemoteCommand)

总结

  • -w 参数:用于创建 TUN/TAP 隧道,需在配置文件中使用 Tunnel 指令。
  • 核心步骤:服务端启用 PermitTunnel,客户端配置隧道设备并分配 IP。
  • 适用场景:构建 VPN、跨网络透明代理、支持 UDP 的全协议转发。

sshuttle

更智能的方案(推荐使用 sshuttle)

如果不需要精细控制 TUN 设备,推荐使用轻量级 SSH VPN 工具:

1
2
3
4
5
# 安装 sshuttle(Python 编写,无需内核驱动)
brew install sshuttle

# 一键启动 VPN(自动处理路由和隧道)
sshuttle -r root@10.0.1.90 --python $(which python3) 0.0.0.0/0

效果:

  • 所有流量自动通过 SSH 隧道
  • 无需手动配置 TUN 设备
  • 自动处理路由规则

两种方案对比

特性 原生 SSH TUN 方案 sshuttle 方案
配置复杂度 高(需手动管理设备) 低(一键启动)
跨平台兼容性 依赖 TUN 驱动 纯 Python 实现
流量控制 需手动配置路由 自动路由所有流量
系统权限需求 需要 root/sudo 普通用户权限
适用场景 需要精细控制网络层 快速建立全流量 VPN

测试连接

对于原生 SSH TUN 方案:

1
2
3
4
5
6
7
8
9
# 连接并创建隧道
ssh dev-2023-tunnel

# 验证 macOS 端隧道
ifconfig utun0
# 应看到 10.1.0.1 的 IP

# 测试远程连通性
ping 10.1.0.2

常见问题处理

  1. 出现 utun0: Network is down 错误

    • 确认已安装 TUN 驱动
    • 检查 sudo 权限是否配置正确
  2. sshuttle 无法启动

    • 指定 Python3 路径:--python $(which python3)
    • 确保远程服务器允许 SSH 端口转发
  3. 部分应用不遵循系统路由

    • 配合使用 --dns 参数转发 DNS 请求
    1
    sshuttle -r user@host --dns 0.0.0.0/0

定制化 SSH VPN 专用服务器方案

PS: 没啥用, 仅供参考


定制化 SSH VPN 专用服务器方案

针对「服务器仅用于 SSH VPN」的场景,以下是优化后的安全实施方案,实现 客户端零配置 + 服务器自动鉴权


一、服务器端配置(一次性操作)

1. 创建专用 VPN 用户

1
2
sudo useradd -r -s /usr/sbin/nologin vpn-tunnel  # 创建无登录权限的系统用户
sudo mkdir -p /home/vpn-tunnel/.ssh

2. 生成服务器专用密钥对

1
2
3
4
5
# 在服务器上生成密钥(仅需执行一次)
sudo ssh-keygen -t ed25519 -f /etc/ssh/vpn-server-key -N "" -C "vpn-server@company"

# 设置权限
sudo chmod 600 /etc/ssh/vpn-server-key*

3. 配置自动授权

1
2
3
# 将公钥设为 VPN 用户的唯一授权方式
sudo cp /etc/ssh/vpn-server-key.pub /home/vpn-tunnel/.ssh/authorized_keys
sudo chown -R vpn-tunnel:vpn-tunnel /home/vpn-tunnel/.ssh

4. 加固 SSH 配置 (/etc/ssh/sshd_config)

1
2
3
4
5
6
7
8
9
# 限制 VPN 用户权限
Match User vpn-tunnel
AllowTcpForwarding no # 禁用端口转发
PermitTunnel yes # 允许创建隧道
ForceCommand /bin/false # 禁止执行任何命令
AuthenticationMethods publickey
PermitRootLogin no
X11Forwarding no
AllowAgentForwarding no

5. 应用配置

1
sudo systemctl restart sshd

二、客户端零配置连接方案

方案 A:预共享密钥(适合内网可信环境)

  1. 获取服务器私钥
    将服务器生成的 /etc/ssh/vpn-server-key 私钥分发给客户端,保存为 ~/.ssh/vpn-default-key

  2. 建立连接

    1
    sshuttle --ssh "ssh -i ~/.ssh/vpn-default-key" -r vpn-tunnel@10.0.1.90 0.0.0.0/0

方案 B:证书认证(更安全,适合生产环境)

1
2
3
4
5
6
7
# 在服务器上生成 CA 证书
sudo ssh-keygen -t ed25519 -f /etc/ssh/ca_key -N ""

# 签署 VPN 用户证书(有效期 30 天)
sudo ssh-keygen -s /etc/ssh/ca_key -I "vpn-cert" -n vpn-tunnel -V +30d /home/vpn-tunnel/.ssh/authorized_keys

# 客户端只需信任 CA 公钥即可连接

三、自动化连接脚本

创建一键连接脚本 vpn-connect

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
SERVER_IP="10.0.1.90"
TUN_KEY="vpn-default-key"

# 自动检测本地密钥
if [ ! -f ~/.ssh/$TUN_KEY ]; then
echo "下载默认 VPN 密钥..."
curl -s https://internal.company.com/vpn-keys/$TUN_KEY > ~/.ssh/$TUN_KEY
chmod 600 ~/.ssh/$TUN_KEY
fi

# 静默启动 VPN
sshuttle --ssh "ssh -i ~/.ssh/$TUN_KEY -o StrictHostKeyChecking=no" \
-r vpn-tunnel@$SERVER_IP 0.0.0.0/0 \
--daemon --pidfile /tmp/sshuttle.pid

echo "VPN 已启动 (PID: $(cat /tmp/sshuttle.pid))"

四、安全增强措施

安全层级 实施方法
网络隔离 服务器绑定 VPN 专用网卡,仅开放 SSH 端口
密钥轮换 通过 cron 每周自动更新服务器密钥,客户端脚本同步获取新密钥
连接审计 服务器记录所有 VPN 连接日志到 /var/log/ssh-vpn.log
流量限制 使用 iptables 限制每个客户端的带宽和并发连接数
双因子认证 集成 Google Authenticator 实现动态口令(需修改 SSH PAM 配置)

五、方案优势对比

特性 预共享密钥方案 证书认证方案
部署复杂度 低(适合小型团队) 中(需要 CA 管理)
安全性 依赖密钥保管 自动过期 + 吊销列表
客户端更新需求 密钥变更需重新分发 无需更新客户端
适合场景 内部测试/临时使用 生产环境/长期运维

六、运维监控建议

  1. 状态检查脚本 (check-vpn.sh)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    # 检查活跃连接
    netstat -tn | grep ':22' | grep ESTABLISHED

    # 监控流量
    vnstat -i tun0 -tr 5

    # 自动重启(如果进程不存在)
    pgrep sshuttle || /path/to/vpn-connect
  2. Prometheus 监控指标

    1
    2
    3
    4
    5
    6
    7
    # 暴露 SSH 隧道指标
    - job_name: 'ssh_vpn'
    static_configs:
    - targets: ['10.0.1.90:9100']
    metrics_path: /probe
    params:
    module: [ssh_tunnel]

七、应急预案

  1. 快速封锁用户

    1
    2
    # 实时移除授权
    sudo sed -i '/user-pubkey/d' /home/vpn-tunnel/.ssh/authorized_keys
  2. 紧急切换端口

    1
    2
    # 使用 socat 临时重定向流量
    socat TCP-LISTEN:2222,fork TCP:10.0.1.90:22
  3. 全流量捕获分析

    1
    sudo tcpdump -i tun0 -w vpn-traffic.pcap

通过此方案,您将获得:

  • 客户端:无需管理密钥,一键连接
  • 服务端:自动化的密钥生命周期管理
  • 安全:企业级防护与监控能力
  • 运维:完善的应急和审计机制

可根据实际需求选择预共享密钥或证书认证方案,平衡安全性与易用性。

0%