web-dev-qa-db-ja.com

ControlMasterディレクトリの権限

ControlMasterssh機能により、複数のssh-コマンドに同じチャネルを使用できます。 オープンなssh接続を維持し、シェルスクリプトから使用するにはどうすればよいですか?

ControlMasterを使用するには、これらの行を~/.ssh/configに追加しました。

Host example.com
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h-%p
  ControlPersist 5m

ssh example.comを実行すると、次のエラーが表示されます。

$ ssh example.com
bind: No such file or directory
unix_listener: cannot bind to path: /home/peter/.ssh/sockets/[email protected]

これを修正するには、mkdir ~/.ssh/socketsを実行します:

$ mkdir ~/.ssh/sockets
$ ll ~/.ssh/sockets
total 8
drwxrwxr-x 2 peter peter 4096 Dec 28 17:51 ./
drwx------ 3 peter peter 4096 Dec 28 17:51 ../

ご覧のとおり、ディレクトリ~/.ssh/socketsにはパーミッションrwxrwxr-wがあります。 ~/.ssh/socketsのパーミッションは何ですか? sockets~/.sshにも含まれている必要がありますか?

2
Peter

socketsディレクトリは好きな場所に置くことができます(そこに書き込むための適切な権利がある限り)が、.sshの中に置くことは賢明なアイデアのようです(非常にまれな特定の場合を除く私がかつて持っていたようなケース:パス名が長すぎました)

.sshはすでにdrwx------のようなものでなければならないので、.ssh/socketsの権利は同じか、より寛大である可能性があり、これは影響を与えません。

しかし、これがあなたの問題だとは思いません。エラーメッセージが設定ファイルと一致していません。構成ファイルのControlPathには@があります(それでも構いません)が、エラーメッセージにはありません。

テスト時には、特定のホストに対して実行中のsshインスタンスをすべて強制終了するようにしてください。一部は構成ごとに保持され、変更すると予期される動作が得られない場合があります。

PS:文書化のためにダミーのホスト名が必要な場合はexample.comを使用してください

2
Patrick Mevzek