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, 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아닌 셸의 전체 경로로 설정 해야 합니다 .bashzsh

노력하다:

SHELL=/bin/bash ssh user@host

관련 정보