Posso detectar se a autenticação da chave ssh será bem-sucedida antes de tentar?

2

Eu tenho um script que precisa ser executado sem qualquer interação do usuário e que precisa configurar o encaminhamento de porta SSH. Ele não deve solicitar uma senha - se o SSH precisar de uma senha para prosseguir, gostaria que meu script fosse excluído.

Existe alguma maneira de obter SSH para me dizer se o meu agente SSH está configurado corretamente para se conectar a um determinado host antes de tentar a conexão?

    
por Mark W 06.05.2016 / 15:23

2 respostas

4

O ssh tem uma opção "BatchMode" que fará com que simplesmente falhe em vez de pedir uma senha. Isso parece muito mais fácil do que ter seu script tentando prever se ele pedirá uma senha. Uma resposta a uma pergunta semelhante no SuperUser indica que a simples desativação da PasswordAuthentication nem sempre é funcionam porque há vários tipos de autenticação interativa diferentes, e também não parece que isso irá impedir que ela solicite uma senha em uma chave.

Você pode usar ssh -o BatchMode=yes ou colocá-lo em seu ssh_config para o host.

Além disso, o ssh não solicitará uma senha se não houver um terminal de controle (ele recebe um erro " read_passphrase: can't open /dev/tty: No such device or address ") - você pode iniciar um processo sem controle tty com setsid , o ideal é fazer quando você iniciar o Jenkins em vez de fazê-lo especificamente para o comando ssh (isso também impedirá que sudo solicite uma senha, etc.)

Observe que, se você executar um processo com setsid , ele será executado automaticamente em segundo plano (já que o shell não pode trabalhar com controle de tarefas com processos em sessões diferentes), portanto, você precisa estar preparado para isso redirecionando stdout / stderr para um arquivo de log (e stdin para / dev / null). Você pode obter resultados estranhos se um programa executado em setsid tentar ler qualquer coisa a partir da entrada padrão, já que os mecanismos usuais para impedir que um processo de segundo plano leia o terminal não funcionam.

    
por 06.05.2016 / 16:38
2

Você não pode saber se vai funcionar sem realmente tentar. Há várias coisas que podem dar errado.

No seu caso, olhando para a página do manual ssh_config , eu vejo que há uma opção "PasswordAuthentication" que pode ser definida como no. Olhando para a página do manual ssh , vejo que há um '-o' opção que você pode usar para enviar opções de configuração para o programa.

Portanto, acho que você pode usar isso para desativar PasswordAuthentication e conseguir o que deseja.

    
por 06.05.2016 / 15:55