Eu tenho colocado meus arquivos de identidade ssh dentro da minha pasta ~ / .ssh /. Eu provavelmente tenho cerca de 30 arquivos lá.
Quando eu me conectar a servidores, especificarei o arquivo de identidade a ser usado, com algo como
ssh -i ~ / .ssh / client1-identity [email protected]
No entanto, se eu não especificar um arquivo de identidade e apenas usar algo como isto:
ssh [email protected]
Eu recebo o erro
Muitas falhas de autenticação para o usuário123
Eu entendo isso porque, se nenhum arquivo de identidade for especificado, e o ssh puder encontrar arquivos de identidade, ele tentará todos eles.
Também entendo que posso editar o ~/.ssh/config
arquivo e especificar algo como:
Host example.com PreferredAuthentications, teclado interativo, senha
para impedir que essa conexão tente arquivos de identidade conhecidos.
Portanto, acho que posso mover meus arquivos de identidade para fora do ~/.ssh/
diretório ou especificar cada host para o qual desejo desativar a autenticação de arquivos de identidade no arquivo de configuração, mas existe alguma maneira de dizer ao SSH para comprar o SSH padrão, não procurar arquivos de identidade? Ou para especificar os que ele procurará?
fonte
ssh -v
para descobrir com certeza.Respostas:
Você pode usar a
IdentitiesOnly=yes
opção junto comIdentityFile
(consulte a página de manual do ssh_config ). Dessa forma, você pode especificar quais arquivos devem procurar.Neste exemplo, o ssh procurará apenas as identidades fornecidas nos arquivos ssh_config + as 4 listadas na linha de comando (as identidades fornecidas pelo agente serão ignoradas):
Os formulários
-i
e-o IdentityFile=
são intercambiáveis.fonte
IdentitiesOnly yes
(sem o "=")?Configuration options may be separated by whitespace or optional whitespace and exactly one '='; the latter format is useful to avoid the need to quote whitespace when specifying configuration options using the ssh, scp, and sftp -o option.
IdentitiesOnly
nem sempre funciona, talvez você precise excluir um host especificamente; consulte superuser.com/questions/859661/…A resposta curta de user76528 está correta, mas eu apenas tive esse problema e achei que alguma elaboração seria útil. Você também pode se importar com esta solução se se perguntar "Por que o ssh está ignorando minha opção de configuração do arquivo de identidade"?
Primeiramente, diferente de todas as outras opções do ssh_config, o ssh não usa a primeira
IdentityFile
que encontra. Em vez disso, aIdentityFile
opção adiciona esse arquivo a uma lista de identidades usadas. Você pode empilhar váriasIdentityFile
opções e o cliente ssh tentará todas elas até que o servidor aceite uma ou rejeite a conexão.Segundo, se você usar um ssh-agent, o ssh tentará usar automaticamente as chaves no agente, mesmo que você não as tenha especificado na opção IdentityFile (ou -i) do ssh_config. Esse é um motivo comum para o
Too many authentication failures for user
erro. O uso daIdentitiesOnly yes
opção desabilitará esse comportamento.Se você fizer o ssh como vários usuários em vários sistemas, recomendo colocar
IdentitiesOnly yes
na seção global do ssh_config e colocar cada umIdentityFile
nas subseções Host apropriadas.fonte
IdentitiesOnly yes
na seção global de ssh_config foi o que fez por mim. Obrigado!Host * \ IdentityFile ~/.ssh/mykey
como uma opção de configuração e, a princípio, parecia estranho ter uma entrada diferente para um site específico, por exemplo,Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes
continuar fornecendo emmykey
vez despecialkey
. Certamente não estava claro, até que eu percebi (pela sua resposta) que as entradas do IdentityFile estão empilhadas em uma ordem de avaliação e a última definida será usada. A remoçãoIdentityFile ~/.ssh/mykey
resolveu o problema e a chave única correta foi usada.git pull/push
comandos estavam tentando cada identidade carregada no meu agente. Não foi um problema até que, a certa altura, eu tinha muitas chaves.Eu geralmente faço assim:
As opções são as seguintes:
-o IdentitiesOnly=yes
- instrui o SSH a usar apenas as chaves fornecidas pela CLI e nenhuma do$HOME/.ssh
ou via ssh-agent-F /dev/null
- desativa o uso de$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- a chave que você deseja usar explicitamente para a conexãoExemplo
Observe na saída acima que
ssh
apenas identificou amy_id_rsa
chave privada via CLI e que ela a usa para conectar-se a um servidor.Especificamente estas seções:
e:
fonte
-F /dev/null
é a peça que falta nas outras respostas.No cenário em que você tem muitas chaves, você sempre encontrará o erro "Demasiadas falhas de autenticação". Se você possui uma senha e deseja simplesmente usá-la para efetuar login, eis como você o faz.
Para usar APENAS a autenticação por senha e NÃO usar chave pública, e NÃO usar o "teclado interativo" um tanto enganador (que é um superconjunto incluindo a senha), você pode fazer isso na linha de comando:
fonte
Use o IdentityFile, mas continue usando o ssh-agent para evitar reformulações de senha
A solução aceita de usar
IdentitiesOnly yes
significa que você nunca poderá tirar proveito do ssh-agent, resultando em repetidas solicitações para sua senha ao carregar sua chave.Para continuar usando
ssh-agent
e evitar os erros 'Demasiadas falhas de autenticação', tente o seguinte:Remova todos os scripts de inicialização do console interativo que carregam chaves automaticamente
ssh-agent
.adicione
AddKeysToAgent yes
à configuração ssh do seu cliente. Isso solicitará a senha na primeira conexão, mas depois adicionará a chave ao seu agente.use
ssh-add -D
quando você receber erros de 'muita autenticação'. Isso simplesmente 'redefine' (exclui) seu cache do ssh-agent. Em seguida, tente a conexão novamente na mesma sessão. Você será solicitado a digitar uma senha e, uma vez aceita, ela será adicionada ao seu agente. Como você terá apenas uma chave em seu agente, você poderá se conectar. O ssh-agent ainda está lá para futuras conexões durante a mesma sessão, a fim de evitar novas solicitações.fonte
O cliente ssh e o
ssh-agent
estão se comunicando através de um soquete de domínio Unix, cujo nome é especificado para o cliente pelaSSH_AUTH_SOCK
variável de ambiente (definida pelo agente na inicialização).Portanto, para impedir que uma única chamada do cliente consulte o agente, essa variável pode ser definida explicitamente como algo inválido, como uma sequência vazia;
Uma chamada do cliente como essa falhará na comunicação com o agente e poderá oferecer apenas ao servidor as identidades disponíveis como arquivos
~/.ssh/
ou como especificado na linha de comando-i
.fonte
Você teve a resposta o tempo todo (quase):
Trabalhou para mim.
fonte
adicione isso no final do
~/.ssh/config
arquivo para impedir o uso de chaves para servidores que não são de configuração:fonte