テストSSHMatch Exec
特徴。私は最小限のものを持っています~/.ssh/config
:
Match Exec echo
ServerAliveInterval 60
私は走っている
ssh localhost
わかりました。
Unable to execute 'echo': No such file or directory
フルパスを使用するかどうか、二重引用符または一重引用符を使用するかどうかは同じです。また、echo
私のフォルダに偽のスクリプトを入れてみました。.ssh
複数のコマンド()を試しましたtest, nc, connect
。Exec
関数が私のパスをまったく見ていないようです。
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
またはではなくシェルのフルパスに設定する必要があります。bash
zsh
努力する:
SHELL=/bin/bash ssh user@host