ssh-agent像任何dotfile的行为一样

我正在尝试构build(或者发现它是否存在),让我可以将我的点文件作为我访问的服务器,就像ssh-agent为我的密钥所做的那样。

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

我保留所有我的dotfiles下git和公开可用,但这是不够的解决scheme有几个原因:

  1. 我ssh的生产主机,我不能安装混帐,不能轻松访问互联网。
  2. 我不控制AMI的运行,所以我不能烘烤我的点阵文件,而且我通常会共享Ubuntu或root用户,很less有一个专用的用户名在主机上(所以我不能克隆和离开我的dotfiles那里)。

现在我很高兴能够build立这个工作只有一个级别的SSH。 那就是A – > B – > C(如果只有B可以访问点文件,C会丢失)。

我正在想像这样的事情:

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

有一些服务在我的本地主机1234点文件,所以我的问题是:

让删除端的程序从套接字读取它们的点文件的最好方法是什么(尽可能在另一端放置任何必要的东西)。

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

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

其他没有任何内置逻辑的程序,简单地说,不能。 他们没有办法知道他们不应该在文件上open标准。

如果你真的想,你可以创建一个$LD_PRELOAD库来覆盖open以检查文件是否可用,并尝试模拟对文件的访问,很多ALSA可以假装为程序提供OSS支持的方式没有意识到ALSA通过捕获他们尝试打开/dev/dsp ,然后将请求转换到ALSA音频层。

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