2012-09-23 65 views
2

我正在嘗試構建(或者發現它是否存在),這會讓我將我的dotfiles文件作爲我訪問的服務器,例如ssh-agent訪問的服務器對我的密鑰執行的操作。ssh-agent像任何dotfile文件的行爲

我花了很多時間在EC2上工作,當我啓動一個新的實例時,我不喜歡沒有我的dotfiles(主要是.vimrc,.gitconfig和我的別名)。

我把我所有的點文件下Git和是公開的,但是這是不夠的幾個原因,解決辦法:

  1. 我ssh到我不能安裝的git,不能輕易訪問互聯網生產主機。
  2. 我不控制我們運行的AMI,所以我不能烘烤我的點文件,而且我通常會共享ubuntu或root用戶,並且很少在主機上擁有專用用戶名(所以我不能只克隆並將我的dotfiles留在那裏) 。

現在我很高興能夠建立這個工作只有一個級別的SSH。即A - > B - > C(如果只有B有權訪問點文件並且C丟失了文件,則可以)。

我想到的是這樣的:

ssh -t -R 1234:localhost:1234 [email protected] 'export USE_DOTFILES_AGENT=1 ; exec $SHELL'

與服務上1234點文件在我的本地所以我的問題的東西是:

什麼是使對節目的最佳方式刪除方從套接字中讀取它們的點文件(很高興在另一邊放置任何必需的東西)。

編輯:雖然apmasell的答案是有幫助的,我沒有想到這樣的高科技解決方案。可能更多地沿着wget從該端口進入/ tmp/_vimrc的行,然後讓vim以某種方式加載(通過運行alias vim=vim <flag for where to find vimrc>)。

回答

1

對於任何文件,SSH都沒有什麼特別之處。 SSH代理能夠使用該點文件工作,因爲ssh二進制文件知道嘗試通過在$SSH_AUTH_SOCK中設置的命名管道打開到代理的連接,並且SSH客戶端和服務器可以同意代理該請求。

其他沒有內置任何邏輯來完成這個任務的程序,簡單地說,不能。他們沒有辦法知道他們不應該在文件上執行標準open

如果你確實想要,你可以創建一個$LD_PRELOAD'ed庫,它覆蓋open來檢查文件是否可用,並試圖模擬對文件的訪問,這很像ALSA假裝提供OSS支持的方式通過捕獲他們嘗試打開/dev/dsp然後將請求轉換爲ALSA音頻層的程序來識別不知道ALSA的程序。

編寫這樣一段代碼非常棘手,因爲它需要正確地模擬本地系統的行爲。例如,當一個程序寫入時你做了什麼?如果連接消失,你會怎麼做?當你分離一個守護進程時會發生什麼?根據設計,可能會有很多延遲。

相關問題