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?

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>

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.


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.


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

8

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

PreferredAuthentications=publickey

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.