2

我正在尝试构建(或查找它是否存在)一些东西,它可以让我将我的点文件带到我访问的服务器,就像 ssh-agent 为我的密钥所做的那样。

我花了很多时间在 EC2 上工作,当我启动一个新实例时,我不喜欢没有我的点文件(主要是 .vimrc、.gitconfig 和我的别名)。

我将所有 dotfiles 都保存在 git 下并且是公开可用的,但这还不足以解决问题,原因如下:

  1. 我通过 ssh 连接到无法安装 git 且无法轻松访问 Internet 的生产主机。
  2. 我不控制我们运行的 AMI,因此我无法将我的点文件放入其中,而且我通常共享 ubuntu 或 root 用户,并且很少在主机上拥有专用的用户名(所以我不能只是克隆并将我的点文件留在那里)。

现在我很高兴将其构建为仅使用一个级别的 ssh。那是 A -> B -> C (如果只有 B 可以访问点文件并且 C 丢失它们就可以了)。

我正在考虑类似的事情:

ssh -t -R 1234:localhost:1234 user@server 'export USE_DOTFILES_AGENT=1 ; exec $SHELL'

在我的本地主机上为 1234 上的点文件提供服务,所以我的问题是:

使删除端的程序从套接字读取其点文件的最佳方法是什么(很高兴将任何必要的东西放在另一端)。

编辑:虽然 apmasell 的回答很有帮助,但我并没有想到这样的高科技解决方案。可能更多的东西沿着 wget 从那个端口到 /tmp/_vimrc 然后让 vim 以某种方式加载它(通过运行alias vim=vim <flag for where to find vimrc>)。

4

1 回答 1

1

SSH 对任何文件都没有什么特别的作用。SSH 代理能够从该点文件工作,因为ssh二进制知道尝试通过设置的命名管道打开到代理的连接,$SSH_AUTH_SOCK并且因为 SSH 客户端和服务器可以同意代理该请求。

简单地说,其他没有内置任何逻辑来执行此操作的程序不能。他们没有办法知道他们不应该open对文件制定标准。

如果您真的非常想要,您可以创建一个$LD_PRELOAD'ed 库来覆盖open以检查文件是否可用并尝试模拟对文件的访问,就像 ALSA 可以假装为不可用的程序提供 OSS 支持一样通过捕获他们打开的尝试/dev/dsp然后将请求转换到 ALSA 音频层来了解 ALSA。

编写这样一段代码非常棘手,因为它需要正确模拟本地系统的行为。例如,当程序写入时你会做什么?如果连接消失了怎么办?当你 fork 一个守护进程时会发生什么?根据设计,可能会有很多延迟。

于 2012-09-23T01:06:43.573 回答