Como você não passa um comando para ssh
, ele executa um shell, que espera comandos em sua entrada padrão. Mas você não está passando os comandos shell, você está passando tráfego SSH. Hilaridade segue.
O tunelamento é o ponto inteiro de ProxyCommand
. Este exemplo encapsula uma conexão SSH dentro de uma conexão SSH. Se você não quer encapsular, ProxyCommand
não é o que você está procurando.
Desde o OpenSSH 6.4, você pode usar uma diretiva Match
com a palavra-chave exec
para incluir blocos condicionalmente com base em uma diretiva de tempo de execução. Um caso de uso típico é ter diferentes nomes de host reais ou comandos de proxy, dependendo de onde seu laptop está. Cada bloco Match
substitui um bloco Host
e você não pode usar a saída do comando para determinar o nome do host, apenas o fato de que ele saiu com o status 0.
# Connection inside ACME network
Match host foo exec on-acme-network
HostName foo.acme.local
# Connection from outside ACME
Host foo
HostName foo.example.com
Proxying é outra opção. Para estabelecer uma conexão com um nome de host e porta que são determinados no momento da conexão, você pode usar o netcat para configurar o TCP conexão.
Host foo
ProxyCommand nc $(determine-target-host-name) 22
Se você quiser um .ssh/config
totalmente dinâmico, poderá torná-lo um canal nomeado e garantir que um processo esteja sempre escrevendo para ele. Ou coloque-o em scriptfs .