시험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