ssh-keyscan stderr comentário sobre sucesso

1

Estou executando um script de shell para adicionar impressões digitais a known_hosts.

O código é assim:

status=$(ssh-keyscan -T 5 $remotehost >> ~/.ssh/known_hosts 2>&1)
if [[ $? != 0 ]]; then
  echo -n Error: ""
  echo "$status"
  exit 1
fi

O resultado é assim:

ssh-keyscan -T 5 example.com
# example.com SSH-2.0-OpenSSH_5.3
example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAA.....o9sgjFlqfli7ZQ==

Até recentemente, não tive problemas, mas a partir do final ssh-keyscan adiciona comentários ao stderr sobre o sucesso e preenche o arquivo hosts com lixo. Isso eventualmente leva ao erro do arquivo hosts após o mesmo host ter sido usado duas vezes devido a um comando ssh-keygen -R example.com executado para garantir que não haja duplicação.

Eu não consegui descobrir uma maneira de desabilitar esse comentário stderr.

    
por transilvlad 13.10.2014 / 18:02

2 respostas

1

O script original é (eu acho) correto, exceto pela ordem dos redirecionamentos. Troque-os para que o primeiro stderr seja enviado para stdout e, em seguida, redirecione o stdout para o arquivo (deixando stderr inalterado). Isso fornece um arquivo de saída limpo e quaisquer erros armazenados na variável.

Não testado, mas é assim que deve funcionar.

Então, a primeira linha de script deve ser ...

status=$(ssh-keyscan -T 5 $remotehost 2>&1 >> ~/.ssh/known_hosts )
    
por 14.10.2014 / 09:42
0

Eu talvez esteja sentindo falta de algo aqui, mas mudar o 2>&1 para 2>/dev/null certamente funcionará.

Eu provavelmente faria o que você quiser com algo assim, já que seu status $ escrito nunca conterá nada porque você redireciona toda a saída para ~ / .ssh / known_hosts

ssh-keyscan -T 5 $remotehost >> ~/.ssh/known_hosts 2>~/.ssh/error.log
if [[ $? != 0 ]]; then
  echo -n Error: ""
  cat  ~/.ssh/error.log
  exit 1
fi
    
por 13.10.2014 / 18:25

Tags