lsofやフューザを使用せずにOpenSSH制御の基本プロセスを終了するには?

lsofやフューザを使用せずにOpenSSH制御の基本プロセスを終了するには?

もっと直接出る方法はありますか?SSHを開くlsofプログラムやプログラムに依存せずにメインプロセスを制御し、ソケットファイルを削除します。fuser そして全く知らない目的地許可された回答に示されているホスト(接続の詳細)質問?私は次のようなことを考えました。

$ ssh -O exit -S ~/.ssh/7eb92b0827f3e8e1e8591fb3d1a5cd1b94b758cb.socket

私がこれを求める理由は、ユーザーアカウントがログアウトされるたびにすべてのオープンコントロールマスター接続を終了するスクリプト可能な方法を探しているからです。そうしないと、私に不利益が発生します。システムSUSEを開くコンピュータは、まだ開いている制御マスター接続が強制的に終了し、最終的に電源が切れるまで2分間タイムアウトを待ちます。

残念ながらオープンSSHクライアントプログラムのssh要件目的地ControlPathソケットファイルへの実際のファイルパスを推論できるようにするホストとファイル名のパターン。代わりに、-S ctl_pathプログラムオプションを使用して特定のソケットファイルを提供するより直接的なアプローチを考えました。

私のシステム全体のグローバルセクションからSSHを開く私が設定したクライアントプロファイルオープンSSH接続の再利用特性は次のとおりです。

ControlMaster auto      
ControlPath ~/.ssh/%C.socket
ControlPersist 30m

ソケットファイルのファイル名パターンを保持したいと思います。つまり、tokenを使用して%l%h%p%rトークン文字列をハッシュします%C

どんなアイデアがありますか?

ベストアンサー1

これは、制御ホストのソケットファイルのみを使用して私にとって効果的でした。

$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>

メモ:ssh -S ~/.ssh/<controlfile> ...上記の形式のより短い形式を使用することもできます。

はい

以下は、リモートサーバーに確立した接続の例です。

$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$

そして切断します:

$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$

まだ接続されている場合は、強制的にすぐに終了します。

$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$

わかりませんが、ssh 最後に追加のパラメータが必要なのでバグかもしれませんが、blah私が使用しているスイッチの文脈では話しません。

それがなければ、これを得る:

$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

バージョン情報

OSX
$ ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8
セントOS 7.x
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

両方のバージョンで追加のダミー引数が必要であることを確認しました。

アップデート#1

OpenSSHの潜在的なバグでこれを提起アップストリームでは、次のように答えました。

はい - 意図的なものです。

ControlPathには、ホスト名を完全に拡張する必要がある%拡張を含めることができます。

ControlPathに実際にこれが必要かどうかを確認し、ホスト名をオプションにすることを想像できますが、1)%hを使用するControlPathは一般的であり、2)パラメータ解析コードをすでに持っているものよりも迷路にしたくありません。

引用する

おすすめ記事