#命令行 #ssh-config #网络 #openssh #ssh-client #ioctl #exec

程序+库 roameo

测试当前网络接口的状态与命令行选项的匹配

2 个不稳定版本

0.2.1 2023 年 10 月 31 日
0.1.1 2022 年 5 月 27 日

#10 in #exec

GPL-3.0-only

22KB
349

Roameo

概述

这是一个小的 Rust 项目,它封装了一些 ioctls,以便快速轻松地测试特定平台状态。例如,可以测试我们是否当前连接到特定的 Wi-Fi SSID。

它适用于例如 ssh_config(5)Match exec 子句的情况,这将允许根据我们当前连接的无线网络,使用不同的 OpenSSH 客户端配置。例如,当连接到除公司/办公室网络以外的网络时,可以使用 ProxyJump 配置选项通过跳转主机。

这可以通过几行 shell 脚本和命令行工具来实现,但我正在寻找编写一些 Rust 代码的理由,直接使用 ioctls 更不容易出错。

支持的平台

Linux 是我的主要操作系统,并且得到了最好的支持。我也在 MacOS、OpenBSD 和 FreeBSD 上运行和测试此代码,但某些功能(例如 ESSID 匹配)稍微落后。

目标是尽可能平等地支持任何类 Unix 系统。

示例配置

以下是一个 ssh_config(5) 配置片段示例,说明如何使用此代码

Match host 10.0.0.? !exec "roameo -e CorporateWiFi"
    ProxyJump me@jumphost.corp.net:2222
    ForwardAgent yes
    DynamicForward 3128

以下假设示例

  1. 匹配 10.0.0.0/24 子网中的主机 -- 假定是我们假设的公司网络子网,并且
  2. 使用 roameo 的 Match exec 来匹配我们不在名为 CorporateWiFi 的 Wi-Fi 网络上的情况 -- 假定是我们假设的公司网络 Wi-Fi 网络的 ESSID。

这基本上为我们提供了在尝试从除公司网络以外的网络访问公司资源时的特定 SSH 客户端配置。

然后示例继续设置跳转主机、代理转发和 SOCKS5 代理隧道。而当我们连接到公司网络时,这些可能不适用。

未来功能

初始版本仅支持与ESSID或特定源IP地址匹配。计划实现但尚未实现的功能包括

  1. 与IPv6地址和子网匹配
  2. 匹配任何Wi-Fi连接或任何IPv6(全球)地址
  3. 匹配VPN和其他隧道
  4. 更好地支持非Linux平台
  5. 重构以更符合Rust风格

欢迎评论和pull请求。

依赖项

约6-16MB
约191K SLoC