Como forçar o cliente ssh a usar apenas autenticação de senha?

375

Se eu usar o pubkey auth, por exemplo: no Ubuntu 11.04, como posso configurar o cliente ssh para usar apenas a autenticação de senha em um servidor? (apenas necessário por causa do teste de senhas em um servidor, no qual eu faço o login padrão com a chave)

Eu encontrei um caminho:

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.backup

e agora recebo a senha, mas existem formas oficiais?

LanceBaynes
fonte

Respostas:

579

Recentemente, eu também precisei disso e vim com isso:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com

Você precisa garantir que o cliente não esteja configurado para proibir a autenticação de senha.

scoopr
fonte
4
Eu precisava fazer cumprir a solicitação de senha para aparecer em um ambiente onde Kerberos foi usada para autenticação automatizada, e um comando semelhante funcionou para mim nessa situação específica: ssh -o GSSAPIAuthentication=no example.com
IllvilJa
21
Agradável. Apenas -o PubkeyAuthentication=nofoi suficiente no meu caso.
Mivk # 4/16
10
para ssh em um laptop amigo OSX, eu tive que usar: -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no em vez
guido
4
Isso não funciona para mim. Ele continua dizendo: Permissão negada (chave pública). e nunca oferece um prompt de senha.
Reinierpost
7
@reinierpost isso é provável porque o host ssh foi desativado PasswordAuthentication. Na verdade, estou aqui porque queria testar se a autenticação de senha desabilitada funcionava corretamente no meu host.
11338 RubberDuck
169

Eu descobri um atalho para esse fim:

ssh user:@example.com

Observe os dois pontos ( :) e a senha vazia depois dele.

Halil Özgür
fonte
2
Nenhuma documentação ainda. Na verdade, eu procurei o código-fonte do OpenSSH sem sucesso (seu estágio de análise é bastante enigmático e é manhã aqui :)). Minha motivação inicial: muitos clientes solicitam uma senha se você fornecer uma senha vazia, por exemplo:mysql -u user -p
Halil Özgür
43
Isso parece não funcionar mais, pelo menos não no meu caso. ssho cliente estava tentando cegamente chaves privadas não relacionadas para se autenticar em um servidor recém-instalado e continuar sendo rejeitado devido à quantidade máxima de tentativas alcançadas sem nunca precisar solicitar a senha. Para forçar a autenticação de senha para esta primeira conexão, tive que usar a -o PreferredAuthentications=passwordsintaxe, o truque dos dois pontos não tendo efeito perceptível. Portanto, embora valha a pena tentar esse truque, não se deve confiar nele como um comportamento consistente.
WhiteWinterWolf
2
@ HalilÖzgür: Tristes notícias, foi muito mais fácil lembrar e digitar;)!
WhiteWinterWolf
3
@Qualcuno como o WhiteWinterWolf disse, infelizmente não funciona mais em algumas plataformas.
Halil Özgür
2
Verifique se você não possui o PasswordAuthentication no no seu arquivo ssh_config!
Braiam 29/07
32

Assim como o método publicado pelo scoopr, você pode definir as opções por host no arquivo de configuração do cliente ssh.

No seu .sshdiretório, crie um arquivo chamado config(se ele ainda não existir) e defina as permissões como 600, então você pode criar seções que começam com

host <some hostname or pattern>

e defina as opções por host depois disso, por exemplo,

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

então você poderia ter

host server.to.test
PubkeyAuthentication=no

nesse arquivo e simplesmente

ssh server.to.test

e a opção será escolhida.

EightBitTony
fonte
Obrigado por esta resposta. Eu criei uma entrada na minha ~/.ssh/confige adicioneiPubkeyAuthentication no
Craig London
2
Não funciona para mim.
Reinierpost
11

Recentemente, eu precisei disso, mas nenhuma das opções acima funcionou, ssh -vmostrou que as opções da linha de comando passadas pelo -oswitch foram substituídas pelos valores especificados no meu ~/.ssh/configarquivo.

O que funcionou foi o seguinte:

ssh -F /dev/null <username>@<host>

Na sshpágina do manual:

 -F configfile
     Specifies an alternative per-user configuration file.  If a
     configuration file is given on the command line, the system-wide
     configuration file (/etc/ssh/ssh_config) will be ignored. The default 
     for the per-user configuration file is ~/.ssh/config.

Créditos a esta resposta: Como posso fazer com que o ssh ignore .ssh / config?

adeelx
fonte
1
isso não responde à pergunta. Você sempre pode ter as chaves armazenadas no agente e sua abordagem não impedirá que o cliente as use.
Jakuje 22/01
Hum, como alguém poderia resolver esse problema, bem como o que mencionei na minha resposta?
adeelx
2
Além disso, se você tiver as chaves no local padrão (como na pergunta), elas serão usadas independentemente da configuração estar presente ou não. Eu usaria um dos métodos mencionados nas primeiras respostas.
Jakuje 22/01
Não é bem verdade, eu apenas testei no meu Lubuntu 14.04 e, embora eu tenha minhas chaves no local padrão ~/.ssh/config, elas não serão usadas se eu especificar -F /dev/null. ssh -vA saída ajuda nesse caso, mostra claramente que, como tenho uma entrada geral na minha configuração ssh *, ela escolhe usar a chave pública em vez de respeitar as opções passadas pelo -ocomutador, como nas respostas anteriores.
adeelx
1
A localização padrão é a ~/.ssh/id_rsaindicada na página de manual. Esses caminhos são codificados no cliente. Apenas certifique-se de fornecer o usuário correto ao testar.
Jakuje 22/01
4

Tentei algumas dessas respostas, mas ssh -vcontinuei mostrando minhas chaves públicas sendo retiradas do meu diretório pessoal. No entanto, especificar um arquivo de identidade falso fez o truque para mim:

ssh -i /dev/null host

Eu tenho que fazer isso permanentemente (para solucionar o servidor SSH quebrado em uma PDU montada em rack da APC - fique longe dessas coisas se você se preocupa com a segurança -, então acabei colocando a opção no meu arquivo de configuração:

Host apc1 apc2
KexAlgorithms +diffie-hellman-group1-sha1
IdentityFile /dev/null
miken32
fonte
2

As respostas @scoopr e @Halil Özgür não funcionaram para mim.

Isso funcionou para mim:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

Fonte: http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

shrx
fonte
13
A questão é sobre autenticação de cliente por senha. Esta resposta é sobre como verificar se a chave do host dos servidores corresponde a uma em hosts conhecidos. Com efeito, é responder a uma pergunta diferente
Anigel
2

E também não se esqueça, não há BatchMode=yesativo no .ssh / config. Caso contrário, você não terá chance de obter um prompt de senha interativo.

Gunnar Tiedt
fonte
0

Talvez eu seja o único no mundo com esse problema, mas tive um sshde outro sistema operacional em execução (choco ssh no Windows em um shell cygwin) visto viawhich ssh

Então a solução foi

 /usr/bin/ssh [email protected]

Anote o caminho completo. Fiz isso depois de corrercyg-get openssh

Jonathan
fonte