Por que o ssh se desconecta imediatamente ao usar a sintaxe -F / dev / stdin?

3

Eu configurei e inicializei a caixa padrão do Ubuntu VM com os seguintes comandos:

vagrant init ubuntu/trusty64; vagrant up --provider virtualbox

Agora, para fins de educação, gostaria de usar a seguinte sintaxe para o ssh:

ssh -F /dev/stdin < <(vagrant ssh-config) default

Este comando será conectado com êxito à VM, no entanto, desconecta-se logo após a impressão motd .

Eu gostaria de entender por que isso está acontecendo e se há alguma maneira de evitá-lo?

Eu tentei forçar a alocação do pseudo-terminal sem sucesso.

Estou ciente de que a seguinte sintaxe de dois comandos funciona conforme o esperado:

vagrant ssh-config > ssh_tmp
ssh -F ssh_tmp default

então eu gostaria de saber por que ele falha ao usar uma sintaxe de substituição de processo?

    
por kenorb 11.12.2016 / 13:42

1 resposta

3

Você está passando a saída de vagrant ssh-config na entrada padrão do comando ssh . No momento em que ssh executar o comando remoto e conectar o stdin remoto ao stdin local, o final do arquivo foi atingido. Portanto, o shell remoto vê o final do arquivo em sua entrada padrão e sai imediatamente.

Normalmente você deve passar o arquivo de configuração em um descritor de arquivo diferente:

ssh -F <(vagrant ssh-config) default

mas isso não funciona porque ssh fecha os descritores de arquivo não padrão antes de ler seu arquivo de configuração. Portanto, você precisará passar um nome de arquivo real para o processo ssh . Pode ser um pipe nomeado se você não quiser armazenar a saída de vagrant ssh-config :

mkfifo fifo
vagrant ssh-config >fifo &
ssh -F fifo …
rm fifo
    
por 12.12.2016 / 01:42