ssh_config
私は定期的に接続するすべてのホストを含むファイルを定義しました。私はホストに接続したときにtmuxセッションを開始/接続するのが好きなので、設定にその行を追加RemoteCommand tmux new -ADs remote
しました。問題は、ある時点でSSHを介してrsyncを使用しようとすると(時々使用される)、次のエラーが発生することです。
Cannot execute command-line and remote command.
この問題を解決するには、構成ファイルの対応する行をコメントアウトする必要があり、RemoteCommand
後でコメントアウトを削除することを忘れないでください。これは少し迷惑です...
潜在的な回避策(不要または機能しない):
-N
「リモートコマンドを実行しないでください」というフラグを試しましたが、コマンドは無期限に中断されます。- 設定ファイルにエイリアスホストを作成したくありません。これは、1回のマイナーな変更でアイテム数が2倍になるという意味です。
Match Host
rsyncを使用しないとリモートコマンドを実行できません
この状況で役立つ可能性のある構成のヒントや回避策を知っている人はいますか?
とても感謝しています!
答え1
~からオープンSSH 7.6、コマンドラインオプションがssh
ありますRemoteCommand
。そのディレクティブをオーバーライドするために使用できますssh_config
。none
このパラメータを消去するには設定します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つの合理的なソリューションがあります。
サーバーで対話型ログイン時にtmuxを実行するには、
.profile
同様のログイン時間スクリプト(.zprofile
、、、、...)を編集します.config/fish/config.ish
。.login
たとえば、参照してください。SSH経由で接続した直後にスクリプトを実行するにはどうすればよいですか?、SSHログイン時にtmuxを実行する。クライアントで
ssh
tmux を実行するラッパーを定義します。たとえば、シェル関数は次のようになります。tsh () { ssh "$@" tmux new -ADs remote }
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」を使用できます。