SSH -w 参数使用指南:配置文件与参数详解

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 的全协议转发。