
Estou usando uma ferramenta que depende de ssh para conectar-me a um host remoto. Infelizmente, esta ferramenta não aceita entradas do usuário e quando a chave do host remoto é desconhecida, a chamada é interrompida para sempre. Existe uma opção ou um conjunto de opções que fazem com que a invocação do ssh falhe quando a chave do host remoto é desconhecida?
Responder1
Use -o StrictHostKeyChecking=yes
para ssh
invocação:
Se este sinalizador estiver definido como sim, o ssh(1) nunca adicionará automaticamente chaves de host ao arquivo ~/.ssh/known_hosts e se recusará a se conectar a hosts cuja chave de host foi alterada.
O padrão é ask
e é por isso que você tem um problema:
Se este sinalizador estiver configurado para perguntar (o padrão), novas chaves de host serão adicionadas aos arquivos de host conhecidos do usuário somente depois que o usuário confirmar que é isso que ele realmente deseja fazer, e o ssh se recusará a se conectar aos hosts cuja chave de host mudou.
Responder2
Como solução alternativa, você pode verificar se o host é confiável:
$ ssh-keygen -H -F host.example.com
# Host host.example.com found: line 205 type RSA
...
Observe que ssh-keygen termina com 0 em qualquer caso aqui, então você deve verificar a saída:
ssh-keygen -H -F host.example.com |
grep -q found: || echo "host is not trusted" && exit 2
Responder3
Você pode usar -oBatchMode=yes
para falhar onde a interação do usuário seria necessária (por exemplo, solicitando uma senha, verificando a chave do host remoto, etc.)
Responder4
Você pode adicionar opções padrão em ~/.ssh/config como:
Host *
StrictHostKeyChecking no
Isso desativa o ssh reclamando de chaves de host desconhecidas ou alteradas.
Você pode limitar essas opções a um conjunto de hosts fornecendo um padrão de host apropriado.