
Unisonを使用してデスクトップコンピュータとクラウドのコンテナ間でディレクトリを同期したいと思います。私はこの種の操作にUnisonを使用していますが、私が見る問題は、コンテナを起動するたびに異なるホスト名とIP番号を持つことができ、sshdが異なるポート番号で実行されることです。
これをほぼ透明にするために、コンテナを起動するたびに ~/.ssh/config ファイルを次のように編集します。
Host pod
User root
Hostname 184.26.5.182
Port 10666
これにより、IP番号とポート番号を交換しました。
ssh pod
これを行った後などを使用してコンテナにログインできます。ホストエイリアス「pod」が組み込まれていても、問題なくrsyncコンテンツを含むスクリプトを実行できます。 (削除と一緒にrsyncを双方向にする方法を知っていればそれを使用しますが、それは不可能であると確信しています。)
私のUnison設定ファイルは次のとおりです。
root = /Users/me/path/to/dir
root = ssh://pod//path/to/dir
ignore = Path subdir1
ignore = Path subdir2
残念ながら、これはコンテナを起動するたびに別のポート番号(IP番号は通常変更されません)を取得し、Unisonはこれが新しい同期だと思うのでうまくいきません。これは私が望むものではありません。
リモートコンテナが別のシステムに変更されたように見えることを無視し、ホストIDに依存する私の「ポッド」ホストエイリアスを信頼するようにUnisonに指示する方法はありますか?
答え1
私の質問に対する答えを見つけましたが、少し心が痛いです。
まず、ローカルファイルのエントリを~/.ssh/config
次のように変更しました。
Host pod
User root
SetEnv UNISONLOCALHOSTNAME=pod
Hostname 184.26.5.182
Port 10666
もちろん簡単です。ただし、着信クライアントがこのコマンドを実行sshd
できるようにコンテナに設定しないと、機能しません。はいssh
SetEnv
sshd
いいえデフォルトではこれを許可するように構成されています。したがって、コンテナが起動するたびにコンテナから呼び出すことができるスクリプトを作成する必要があります。このスクリプトは、デスクトップコンピュータで一貫して実行する前に、次のことを行います。
- コンテナ
AcceptEnv UNISONLOCALHOSTNAME
の/etc/ssh/sshd_config
。 - 次の手順を実行して、コンテナのsshdに設定ファイルを再ロードするように指示します。
kill -HUP `cat /var/run/sshd.pid`
または:
より簡単には、/root/.bashrc
コンテナでスクリプトを変更できます。
export UNISONLOCALHOSTNAME=pod
場所トップの/root/.bashrc
。 (シェルの一番下に置くと機能しません。シェルがインタラクティブでない場合は、その中のコードが早く終了するため.bashrc
です。).bashrc
.bashrc
残念ながら、コンテナが起動するたびにルートファイルシステムが再初期化されるため、一度だけ編集して終了することはできません。したがって、この書き換えは、/root/.bashrc
クラウドサービスによって提供される永続ファイルシステムに保持するスクリプトを介して実行する必要があります。または、私が使用して変更する.bashrc
デスクトップのローカルスクリプトを使用してコンテナを編集することもできます。ssh
scp