もっと直接出る方法はありますか?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)パラメータ解析コードをすでに持っているものよりも迷路にしたくありません。
引用する
答え2
SSH ControlMaster接続管理を簡素化するユーティリティを作成しました。知られているcmc
:
TimidRobot/cmc: ControlMaster Controller - SSH ControlMaster 接続管理を簡素化します。。