跳转到内容
Doc Record

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

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


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

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

终端窗口
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 地址)。

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

终端窗口
PermitTunnel yes # 允许 TUN/TAP 隧道

重启 SSH 服务生效:

终端窗口
sudo systemctl restart sshd

终端窗口
ssh -w 0:0 root@remote-server.com
  • 本地:
    终端窗口
    sudo ip addr add 10.0.0.1/24 dev tun0
    sudo ip link set tun0 up
  • 远程:
    终端窗口
    sudo ip addr add 10.0.0.2/24 dev tun0
    sudo ip link set tun0 up
终端窗口
ping 10.0.0.2 # 从本地 ping 远程隧道 IP

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

终端窗口
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

  1. 权限问题:

    • 需要 root 权限创建 TUN/TAP 设备,建议以 sudo 运行 SSH 命令。
    • 如果使用普通用户,需配置 CAP_NET_ADMIN 权限:
      终端窗口
      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),需显式指定:
      终端窗口
      ssh -o Tunnel=ethernet -w 0:0 user@host

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