2

ssh-agent がキーに対して行うように、アクセスするサーバーにドットファイルを取得できるようにするものを構築しようとしています (または、存在する場合は見つけようとしています)。

私は仕事で EC2 を使用することに多くの時間を費やしていますが、新しいインスタンスを起動するときに、ドットファイル (.vimrc、.gitconfig、および私のエイリアスのほとんど) が手元にないのは嫌いです。

私はすべてのドットファイルを git の下に保持し、公開していますが、これはいくつかの理由で十分な解決策ではありません:

  1. gitをインストールできず、インターネットに簡単にアクセスできない本番ホストにsshします。
  2. 私は実行元の AMI を制御していないため、ドットファイルを焼き込めません。また、通常は ubuntu または root ユーザーを共有し、ホストで専用のユーザー名を使用することはめったにありません (そのため、ドットファイルを複製してそこに残すことはできません)。

今のところ、これを 1 レベルの ssh だけで動作するように構築できて満足しています。つまり、A -> B -> C です (B のみがドットファイルにアクセスでき、C がそれらを失う場合は問題ありません)。

私は次のようなことを考えています:

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

私のローカルホストの1234でドットファイルを提供するものがあるので、私の質問は次のとおりです。

削除側のプログラムにソケットからドットファイルを読み込ませる最善の方法は何ですか (反対側に必要なものをすべて入れてください)。

編集: apmasellの回答は役に立ちますが、私はそのようなハイテクソリューションを考えていませんでした. おそらく、そのポートから /tmp/_vimrc への wget の行に沿って何かを追加し、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 ライブラリを作成できます。これは、ALSA が OSS サポートを提供していないプログラムに提供するふりをするのと同じ方法です。open開こうとする試みをトラップし/dev/dsp、リクエストを ALSA オーディオ層に変換することで、ALSA を認識します。

このようなコードの記述は、ローカル システムの動作を正しくシミュレートする必要があるため、非常に注意が必要です。たとえば、プログラムが書き込みを行うとき、あなたは何をしますか? 接続が切れたらどうしますか?デーモンをフォークするとどうなりますか? 設計によっては、遅延が大きくなる場合があります。

于 2012-09-23T01:06:43.573 に答える