ssh_configでRemoteCommandオプションをバイパスする方法

ssh_configでRemoteCommandオプションをバイパスする方法

ssh_config私は定期的に接続するすべてのホストを含​​むファイルを定義しました。私はホストに接続したときにtmuxセッションを開始/接続するのが好きなので、設定にその行を追加RemoteCommand tmux new -ADs remoteしました。問題は、ある時点でSSHを介してrsyncを使用しようとすると(時々使用される)、次のエラーが発生することです。

Cannot execute command-line and remote command.

この問題を解決するには、構成ファイルの対応する行をコメントアウトする必要があり、RemoteCommand後でコメントアウトを削除することを忘れないでください。これは少し迷惑です...

潜在的な回避策(不要または機能しない):

  • -N「リモートコマンドを実行しないでください」というフラグを試しましたが、コマンドは無期限に中断されます。
  • 設定ファイルにエイリアスホストを作成したくありません。これは、1回のマイナーな変更でアイテム数が2倍になるという意味です。
  • Match Hostrsyncを使用しないとリモートコマンドを実行できません

この状況で役立つ可能性のある構成のヒントや回避策を知っている人はいますか?

とても感謝しています!

答え1

~からオープンSSH 7.6、コマンドラインオプションがsshありますRemoteCommand。そのディレクティブをオーバーライドするために使用できますssh_confignoneこのパラメータを消去するには設定しますRemoteCommand

したがって、ssh -o RemoteCommand=none ...(またはあなたの場合はおそらくrsync -e 'ssh -o RemoteCommand=none' ...)を使用して、ssh設定ファイルに設定されているリモートコマンドを上書きできます。

少なくともいくつ(現在開いている)抜け穴 レポートssh_config設定を自動的にオーバーライドするようにコマンドライン(存在する場合)で指定されたコマンドを要求します。

答え2

RemoteCommand設定ファイルに入れないでください。場合によってはRemoteCommand、特定のコマンドを実行するホストのエイリアスを定義すると便利です。ssh myalias一般アイテムには使用されません。ご存知のように、特定のコマンドの実行を除くすべての操作をブロックします。 rsync、sftp、sshfs は使用できず、ssh myhost specific-command対話的に実行することもできません。

ホストに接続したときにデフォルトでtmuxを実行するには、2つの合理的なソリューションがあります。

Match hostホスト名に基づいて他の操作を実行することに興味がないため、ディレクティブは役に立ちません。コマンドがsshに渡されるかどうかに応じて、sshクライアントが他の操作を実行する方法はないと思います。実行可能なコードを使用できますMatch exec。私の考えには一つもないようです。きれいコマンドを使用してsshが呼び出されるかどうかを検出する方法がありますが、汚れたアプローチでも十分です。

Host myhost
Match exec "ps -o args= $PPID | grep -v ' .* '"
    RemoteCommand if [ -t 0 ]; then exec tmux new -ADs remote; fi

sshオプションなしでホスト名のみを呼び出すと、tmuxが実行されます。sshホスト名に加えて、1つ以上のオプションまたはコマンドを使用して呼び出すと、RemoteCommandディレクティブは適用されません。また、入力が端末(例えばecho ls | ssh myhost)から出ない場合でもtmuxを実行しないでください。これは、tmuxを実行しないほとんどの場合(たとえば、tmuxを実行しない場合)を解決しますssh -L … myhost

答え3

私は使うこれ私の*nixクライアントのすべてのインタラクティブシェルにRemoteCommand'ing tmux / screenを許可すると同時にいいえこれは、コマンドラインからRemoteCommandが渡されたときに行われます。

Host MYHOST exec "[[ $(ps h o args p $PPID | wc -w) -eq 2 ]]"
    # matches `ssh <server>` but not `ssh <server> <cmd>`
    Hostname MYHOST.LAN
    User root
    RequestTTY force
    RemoteCommand tmux ls | grep -v attached && tmux attach || tmux new
Host MYHOST
    # matches `ssh <server> <cmd>`
    Hostname MYHOST.LAN
    User root

Windows用OpenSSHを使用してこれを行う方法が見つかりませんでした。どうすればいいのか分かったらコメントを残してください。

答え4

ここに別の考えられる解決策があります。 .ssh/config ファイルの末尾にこれを追加できます。

Host *-tmux
  RemoteCommand tmux new -ADs remote

これにより、構成に追加の項目が1つだけ残ります。 「sshhostx-tmux」を使用して接続(tmuxを実行)することができます。たとえば、tmuxを実行せずに「rsynchostx」を使用できます。

関連情報