是否有解决方案(或 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
——具体取决于您的用例。