根据您所在的文件夹自动 ssh 到远程主机

根据您所在的文件夹自动 ssh 到远程主机

是否有解决方案(或 zsh 插件)允许我根据本地操作系统中的文件夹进行远程 ssh?与 PyENV 类似。

所以如果我开发一个项目并做

cd /home/projects/ERP
ssh production
ssh development

这样,通过易于记住的命令,我可以直接跳到所需的远程主机?

我知道我可以创建别名并在切换目录时从本地文件夹加载它们,但是有更好的方法吗?

谢谢,德米特里

答案1

显然我没有足够的声誉来发表评论来要求澄清,所以我只是在这里猜测,如果不完整,请根据需要编辑我的答案。

我不知道有这样的插件,但编写一个并不会太困难。您的用例并不常见,因此这可能是正确的选择。有大约 5 种不同的方法可以做到这一点。

/etc/ssh/ssh_config不过,首先,我应该提到,您的或中完全可以有“主机别名” ~/.ssh/config,这样可以轻松地将特定主机别名分配给一组 SSH 配置选项。

下面是一个例子。

Host router
    Hostname 10.0.0.1
    Port 222
    User root

这将使输入ssh router等同于输入。ssh [email protected] -p 222

这可能涵盖了您的大部分用例。抱歉,如果您已经知道这一点——我只是想在这里涵盖所有基础内容。

如果您确实需要 SSH 以不同的方式解释固定的 SSH 命令,那么您很可能需要一个 SSH 命令的包装器,它查看输入参数,识别关键参数(例如,生产或开发),解释这些参数,然后选择一个可能的主机(可能在 SSH 配置中预先配置),具体取决于 的值$PWD

让我知道这是否有帮助! ^.^


更新:非常感谢@fra-san,他指出了一个很多更优雅的选择! :D(至少,如果你的特殊情况相对较少,那么会更优雅......)

您可以简单地执行以下操作:

Match host production, exec ssh_match_dir
    Port 5555
    Hostname foodev.biz

PATH 中的哪个ssh_match_dir脚本在检测到条件应适用时以状态 0 退出,如下所示:

#!/usr/bin/env bash
if test "$PWD" = "/home/a/git"; then
    exit 0
else
    exit 1
fi

请务必查看man ssh_config并特别注意该TOKENS部分 - 其中包括有关您可以告诉ssh传递给脚本以添加额外条件的参数的信息。我相信,如果您使用并向脚本添加一些参数解析,您可以让一个脚本处理具有不同任意条件的每个主机exec ssh_match_dir %h——具体取决于您的用例。

相关内容