Como faço para que o ssh falhe em vez de solicitar uma senha se a autenticação de chave pública falha?

107

Eu tenho um script que ssh'es vários servidores usando autenticação de chave pública. Um dos servidores parou de permitir o login do script devido a um problema de configuração, o que significa que o script fica bloqueado com o prompt "Senha:", que obviamente não pode responder, por isso nem tenta o resto dos servidores na lista.

Existe uma maneira de dizer ao cliente ssh para não solicitar uma senha se a autenticação da chave falhar, mas apenas para relatar um erro de conexão e deixar meu script continuar?

rjmunro
fonte

Respostas:

138

Para o OpenSSH, existe o BatchMode, que além de desativar a solicitação de senha, deve desativar a consulta de senha (s) de senha.

BatchMode

Se definido como "yes", a consulta de senha / senha será desativada. Essa opção é útil em scripts e outros trabalhos em lotes em que nenhum usuário está presente para fornecer a senha. O argumento deve ser "sim" ou "não". O padrão é "não".

Uso da amostra:

ssh -oBatchMode=yes -l <user> <host> <dostuff>
Kjetil Joergensen
fonte
Essa autenticação de chave pública desabilitada para mim. No entanto, eu estava especificando como ssh user @ host -C um comando. O que acabou por trabalhar para mim é apenasssh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll
20

Adicione o seguinte ao seu ~/.ssh/config:

PasswordAuthentication no

e para desativar a autenticação de senha no servidor, adicione a mesma linha /etc/ssh/sshd_confige reinicie sshd.

cas
fonte
7
se você não quiser desativar a autenticação de senha para todas as conexões do cliente ssh, também poderá especificar opções na linha de comando. adicione '-oPasswordAuthentication = no' ao seu comando ssh.
cas
7
Isso não impede o prompt da senha. O script do OP ainda travará.
Joshua Swink
11

Se você estiver usando o dropbear, basta adicionar a -sopção " " para desativar a autenticação por senha.

sybreon
fonte
4
+1 para não assumir o cliente é :-) openssh
cas
8

Na linha de comando (ou ~/.ssh/config) você pode definir PreferredAuthentications.

PreferredAuthentications=publickey
Rory
fonte
Eu acho que, na linha de comando, você precisa agrupar a opção entre aspas e depois passá-la para a opção -o.
Craig Walker
3
@CraigWalker Você também pode passar como está, ie #ssh -o PreferredAuthentications=publickey
Tobias Kienzler
@CraigWalker Você precisa de aspas se você deseja usar espaços para separar a opção eo valor por exemplossh "-oPreferredAuthentications publickey"
Timo