Match Execは何もできません。

Match Execは何もできません。

テストSSHMatch Exec特徴。私は最小限のものを持っています~/.ssh/config

Match Exec echo
   ServerAliveInterval 60

私は走っている

ssh localhost

わかりました。

Unable to execute 'echo': No such file or directory

フルパスを使用するかどうか、二重引用符または一重引用符を使用するかどうかは同じです。また、echo私のフォルダに偽のスクリプトを入れてみました。.ssh複数のコマンド()を試しましたtest, nc, connectExec関数が私のパスをまったく見ていないようです。

OpenSSHを使用してWSL Debianを実行しています。私の究極の目標は、一致セクションで接続の可能性をテストして$http_proxyプロキシを自動的に使用できるようにすることですが、上記のタスクを実行するのに十分なはずです。

答え1

"match"ディレクティブを呼び出すために、sshは実際に次のものを呼び出します。

$SHELL -c 'command'

"$SHELL" は SHELL 環境変数の値でも、デフォルト値 (通常 "/bin/sh") でもかまいません。 「command」は「match」ディレクティブのコマンドです。ここにいるコマンドを実行する実際のコード:

    argv[0] = shell;
    argv[1] = "-c";
    argv[2] = xstrdup(cmd);
    argv[3] = NULL;

    execv(argv[0], argv);
    error("Unable to execute '%.100s': %s", cmd, strerror(errno));

execv()実行中のシェルへのすべての種類のパスは検索されないため、SHELLは「/bin/bash」または「/usr/local/bin/zsh」などのフルパス名でなければなりません。

シェルが起動しても「echo」を実行できない場合、シェルでエラーが発生します。しかし、あなたが得るエラーはsshで発生します。これは、問題が「echo」コマンドではなく呼び出しシェルにあることを意味します。

最も簡単な説明は、SHELL環境変数が無効であることです。見つからないファイルを参照または読み取れないディレクトリにあります。

答え2

環境変数を、SHELLまたはではなくシェルのフルパスに設定する必要があります。bashzsh

努力する:

SHELL=/bin/bash ssh user@host

関連情報