如何根据本地子网自动切换ssh配置?

2024-04-17

当我在某个网络(子网为 10.10.11.x)上时,我需要跳过中间主机才能到达目的地,因为我无法更改目的地端口,并且可以退出受限网络的端口有限。我成功地使用了如下所示的 ssh 配置:

Host web-direct web
    HostName web.example.com
    Port 1111

Host web-via-jump jweb
    HostName web.example.com
    Port 1111
    ForwardAgent yes
    ProxyCommand ssh -p 110 -q relay.example.com nc %h %p

通过跳转箱会对性能造成重大影响,因此在大多数不需要的情况下我需要避免它。切换 ssh/scp/rsync 主机昵称对于交互式使用来说很好,但是有一些自动化/脚本化任务,这是非常痛苦的。

我的 shell 在网络转换期间保持打开状态,因此启动 (.zshrc) 机制没有帮助。

我想过运行一个脚本来轮询受限子网,并通过修改 .ssh/config 文件来自动进行切换,但我什至不确定是否会存在缓存问题。在实施之前,我想我会问是否有更好的方法。

基于源主机子网检测交换 ssh 配置的最佳方法是什么?

在伪配置中,类似:

if <any-active-local-interface> is on 10.10.11.x:
    Host web
        HostName web.example.com
        Port 1111
        ForwardAgent yes
        ProxyCommand ssh -p 110 -q relay.example.com nc %h %p
else:    
    Host web
        HostName web.example.com
        Port 1111
endif

您可以使用Match https://man.openbsd.org/ssh_config.5#Match's exec执行 shell 命令的选项,因此您可以编写如下内容:

Match host web exec "hostname -I | grep -qF 10.10.11."
    ForwardAgent yes
    ProxyCommand ssh -p 110 -q relay.example.com nc %h %p
Host web
    HostName web.example.com
    Port 1111

The Match选项布尔逻辑可以短路,所以把host首先要跳过exec其他主机的术语。尝试ssh web -vvv看到Match行动中的逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据本地子网自动切换ssh配置? 的相关文章

随机推荐

  • 针对特定 EF Core 查询优化未知

    我有一个使用 EF Core 3 1 在 NET Framework 上运行的 webjob 项目 Webjob 处理来自 Azure 服务总线的消息并将其保存到 Azure SQL 数据库中 我遇到的问题是 Azure SQL 数据库为
  • Python psycopg2 不是 utf-8

    我使用 Python 连接到我的 postgresql 数据库 如下所示 conn psycopg2 connect database fedour user fedpur password host 127 0 0 1 port 5432
  • 无法从 D 中的 std.range 中切片 Take!R?

    我正在尝试使用切片运算符从 std range 获取 take 函数的返回值的切片 我的代码 auto tempChunk a b c d auto a tempChunk take 3 writeln a 0 2 由于本例中的 Take
  • 按后缀组合列表元素

    给定两个带后缀的列表 l1 C 1 B 1 A l2 B 2 C 2 D 我想像这样组合它们 C 1 C 2 B 1 B 2 A D 元素将与l1作为锚 这意味着 如果C 出现在之前B in l1 相同的顺序将保留在输出中 此外 具有相同前
  • 使用 Razor、ASP.NET MVC 3 和 .NET 4.0 主从创建视图

    我是 NET 的新手 如果我有任何愚蠢的错误 请耐心等待 我正在使用 ASP NET MVC 3 和 NET 4 0 我想要一个 Create 具有子模型的模型的视图 该视图应包含子模型的partial Create 视图 我将使用以下简单
  • 从 utf8_unicode_ci Mysql 表打印文本时出现错误字符

    我将文本插入 更新到 utf8 unicode ci 编码表mysql query SET NAMES utf8 它在 mysql 表中显示为 但是当我用 PHP 打印它时 它看起来像 在页面上 我尝试添加 但没有用 如何在页面上正确显示
  • 如何使用MediaControllerCompat来控制当前播放器?

    我的应用程序不是媒体播放器 我只是希望能够使用新的控制当前的媒体播放器媒体控制器兼容 http developer android com reference android support v4 media session MediaCo
  • Nvidia Theano docker 镜像不可用

    尝试运行 docker 命令 nvidia docker run d p 8888 8888 e PASSWORD 123abcChangeThis theano secure start notebook sh Then open you
  • 如何将存储库注入到 Symfony 中的服务中?

    我需要将两个对象注入ImageService 其中一个例子是Repository ImageRepository 我得到这样的 image repository container gt get doctrine odm mongodb g
  • plesk 上的 docker 中的 Neo4j(3.4.17、3.5.13、4.0.0)不使用 /ssl 中提供的 SSL 证书,而是尝试删除它们并进行自己的自签名

    此配置在某些时候对我有用 但由于没有启用自动续订 在短暂的 VPS 暂停后就停止了 根据文档 我在一个文件夹中提供了 neo4j cert 和 neo4j key 然后将其安装在 ssl 的容器上 不幸的是 neo4j 将停留在 清理自生成
  • 如何在哈希表末尾添加键/值对?

    我正在尝试使用 PowerShell 脚本计算代码计数 我在互联网上找到了一个脚本 并尝试在末尾添加总行 我已经添加了栏目 CountHash Add Total Total 在最后 Param string path string out
  • 提取元素文本值

    我在用JAXB使用以下命令生成将 xml 解组为 java 实体的代码xsd原理图文件 问题是生成的代码不会生成name of an organization在以下 xml 中指定
  • 直接从浏览器发送文件到 S3 但更改文件名

    我在用签署授权的 S3 上传 https aws amazon com articles 1434这样用户就可以绕过我的服务器直接从浏览器上传文件到 S3 目前这可以工作 但文件名与用户计算机上的文件名相同 我想将其以不同的名称保存在 S3
  • Mercurial 合并两个命名分支:工作目录没有祖先

    我有两个命名分支 SPRINT 009 和 SPRINT 010 一些变更集已提交给 SPRINT 009 我想将其合并到 SPRINT 010 中 我能够毫无问题地将分支中的变更集合并回默认值 我在将变更集从branch one合并到br
  • Bash 中的多维关联数组

    我正在尝试创建一个多维关联数组 但需要一些帮助 我已审查过这个SO答案中建议的页面 https stackoverflow com questions 3020713 how to print bash varibles contents
  • facebook画布高度在ie8和firefox中没有设置滚动

    嘿 我想设置一个长页面应用程序 没有FB会限制我的应用程序的高度并附加滚动 我做了 iframes canvas 并在设置中自动调整大小并应用该代码 它限制了我在 ie 中显示滚动并在 firefox 中剪切内容 代码在这里 http pa
  • 在python中使用windows资源管理器浏览器存储文件路径

    我在 python 中编写了一些加密代码 它从用户那里获取原始输入消息 然后使用 AES 对其进行加密和解密 现在我想增强工作 我希望我可以从代码中打开 Windows 资源管理器并浏览到计算机上的任何文件 选择它 当我按 确定 按钮时 文
  • noscript 标签的正文样式?

    如果没有启用 JavaScript 我希望我的身体有overflow hidden 没有滚动条 我该如何解决这个问题 是否可以在 内部使用 noscript 标签并在其中设置特定样式 如果你的意思是对于 HTML 文档 我会构建 HTML
  • 根据 XSD 验证 XML 时忽略元素顺序

    我们有一个 XML 需要根据 XSD 进行验证 XML 由 XSTREAM 生成 我们正在使用 jaxp api 根据相应的 XSD 验证 XML 不幸的是 目前我们的测试用例失败 因为生成的 XML 的元素 标签的顺序 顺序与 XSD 不
  • 如何根据本地子网自动切换ssh配置?

    当我在某个网络 子网为 10 10 11 x 上时 我需要跳过中间主机才能到达目的地 因为我无法更改目的地端口 并且可以退出受限网络的端口有限 我成功地使用了如下所示的 ssh 配置 Host web direct web HostName