Unisonを使用してデスクトップコンピュータをクラウド内のコンテナと同期する

Unisonを使用してデスクトップコンピュータをクラウド内のコンテナと同期する

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できるようにコンテナに設定しないと、機能しません。はいsshSetEnvsshdいいえデフォルトではこれを許可するように構成されています。したがって、コンテナが起動するたびにコンテナから呼び出すことができるスクリプトを作成する必要があります。このスクリプトは、デスクトップコンピュータで一貫して実行する前に、次のことを行います。

  1. コンテナAcceptEnv UNISONLOCALHOSTNAME/etc/ssh/sshd_config
  2. 次の手順を実行して、コンテナのsshdに設定ファイルを再ロードするように指示します。
kill -HUP `cat /var/run/sshd.pid`

または:

より簡単には、/root/.bashrcコンテナでスクリプトを変更できます。

export UNISONLOCALHOSTNAME=pod

場所トップ/root/.bashrc。 (シェルの一番下に置くと機能しません。シェルがインタラクティブでない場合は、その中のコードが早く終了するため.bashrcです。).bashrc

.bashrc残念ながら、コンテナが起動するたびにルートファイルシステムが再初期化されるため、一度だけ編集して終了することはできません。したがって、この書き換えは、/root/.bashrcクラウドサービスによって提供される永続ファイルシステムに保持するスクリプトを介して実行する必要があります。または、私が使用して変更する.bashrcデスクトップのローカルスクリプトを使用してコンテナを編集することもできます。sshscp

おすすめ記事