Testando o recurso SSHMatch Exec
. Eu tenho esse mínimo ~/.ssh/config
:
Match Exec echo
ServerAliveInterval 60
e eu estou correndo
ssh localhost
eu recebo
Unable to execute 'echo': No such file or directory
Isso é verdade independentemente de eu usar um caminho completo ou não, ou usar aspas duplas ou simples. Eu tentei colocar um echo
script falso na minha .ssh
pasta também. Eu tentei vários comandos ( test, nc, connect
). Parece que o Exec
recurso não pode ver meu caminho.
Estou executando o WSL Debian com OpenSSH. Meu objetivo final é testar se $http_proxy
é alcançável na cláusula de correspondência para automatizar o uso de proxy, mas fazer o acima funcionar seria suficiente.
Para invocar as diretivas "match", o ssh realmente invoca:
"$SHELL" é o valor da variável de ambiente SHELL ou um padrão que geralmente é "/bin/sh". "command" é o comando da diretiva "match". Aqui está o código real que executa o comando :
Observe que
execv()
não pesquisa nenhum tipo de caminho para o shell que está sendo executado, portanto, SHELL deve ser um nome de caminho completo como "/bin/bash" ou "/usr/local/bin/zsh".Se o shell tivesse inicializado e não conseguisse executar "echo", você receberia um erro do shell. Mas o erro que você está recebendo é do ssh. Isso implica que o problema é invocar o shell, não com o comando "echo".
A explicação mais simples é que sua variável de ambiente SHELL é inválida. Refere-se a um arquivo que está faltando ou está em um diretório que você não pode ler.
Você deve definir a
SHELL
variável de ambiente para o caminho completo do seu shell, não simplesmente parabash
ouzsh
.Tentar: