如何通过 nmcli 配置和管理 SSH 隧道?

问题浏览数Icon
21
问题创建时间Icon
2025-05-27 13:44:00
作者头像
fastarrow33
  1. 安装必要插件

    sudo apt install network-manager-ssh  # Debian/Ubuntu
  2. 创建SSH隧道连接

    sudo nmcli connection add type ssh 
      con-name "my-ssh-tunnel" 
      ssh.username your_username 
      ssh.remote 远程IP:22 
      ssh.local-bind-address 127.0.0.1 
      ssh.local-bind-port 本地端口 
      ssh.remote-bind-host 目标服务IP 
      ssh.remote-bind-port 目标服务端口
  3. 配置认证方式(二选一)

    • 密钥认证
      nmcli connection modify my-ssh-tunnel ssh.private-key-path ~/.ssh/id_rsa
    • 密码认证
      nmcli connection modify my-ssh-tunnel ssh.password your_password
  4. 激活隧道

    nmcli connection up my-ssh-tunnel
  5. 管理命令

    • 查看状态:nmcli connection show my-ssh-tunnel
    • 停止隧道:nmcli connection down my-ssh-tunnel
    • 删除配置:nmcli connection delete my-ssh-tunnel

注意

  • 确保NetworkManager服务运行(systemctl status NetworkManager
  • 如遇连接失败,可通过journalctl -u NetworkManager排查
  • 需开放SSH服务端对应端口访问权限

更多回答

作者头像
xingling22

为什么不考虑使用 OpenSSH 自带的动态端口转发或 systemd 服务来管理 SSH 隧道?这类工具通常更灵活且与系统集成更紧密。

作者头像
xiaowen88

通过nmcli配置SSH隧道需结合NetworkManager的VPN插件特性,以下为实战经验与挑战分析:

核心步骤

  1. 安装networkmanager-ssh插件(部分发行版需源码编译)
  2. 创建SSH隧道配置:
    nmcli con add type vpn vpn-type ssh \
    con-name "prod-tunnel" \
    vpn.data "remote=bastion.example.com, local_port=2222, remote_port=22, tunnel_user=admin"
  3. 密钥处理:使用ssh-agent加载密钥环,避免密码明文存储
  4. 动态路由配置:通过nmcli connection modify添加ipv4.routes覆盖目标网段

性能调优参数

  • 设置TCPKeepAlive=yes防止中间路由超时
  • 配置Compression=delayed减少带宽消耗
  • 添加ServerAliveInterval 60维持连接状态

典型故障场景

  1. 多跳隧道MTU不匹配:通过ip link set dev tun0 mtu 1400分段调整
  2. 企业代理拦截:改用443端口并启用ssh -N -T绕过检测
  3. systemd-resolved冲突:在NetworkManager.conf禁用dns=systemd-resolved

监控方案

nmcli -f GENERAL-STATE,TUNNEL-STATUS con show prod-tunnel
journalctl -u NetworkManager --grep="vpn-ssh"

高可用实现 配置多个备份连接,使用nmcli con up id backup-tunnel触发切换,结合Keepalived实现VIP漂移。实际生产环境中需注意SSH连接状态与VRRP的联动检测。

作者头像
raincloud77

通过nmcli配置SSH隧道需结合NetworkManager的SSH VPN插件(如network-manager-ssh)。步骤:1. 安装插件;2. 执行类似 nmcli connection add type vpn vpn-type ssh con-name my-ssh-tunnel vpn.data 'remote=ssh-server.com, port=22, tunnel-device=0, tunnel-local-port=localhost:8080, tunnel-remote-port=remote-host:80, user=myuser' 命令创建隧道,需替换实际参数;3. 启用连接 nmcli con up my-ssh-tunnel。需提前配置SSH密钥或密码,且插件支持可能因系统而异,建议优先使用原生SSH命令管理灵活性更高的场景。