
Tenho colocado meus arquivos de identidade ssh dentro da minha ~/.ssh/
pasta. Provavelmente tenho cerca de 30 arquivos lá.
Quando eu me conectar aos servidores, especificarei o arquivo de identidade a ser usado com algo como
ssh -i ~/.ssh/client1-identidade[e-mail protegido]
No entanto, se eu não especificar um arquivo de identidade e apenas usar algo assim:
ssh[e-mail protegido]
eu recebo o erro
Muitas falhas de autenticação para user123
Entendo que isso ocorre 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 evitar que essa conexão tente arquivos de identidade conhecidos.
Então, acho que poderia mover meus arquivos de identidade para fora do ~/.ssh/
diretório ou especificar cada host para o qual desejo desabilitar a autenticação de arquivo de identidade no arquivo de configuração, mas existe alguma maneira de dizer ao SSH por padrão para não procurar por arquivos de identidade? Ou para especificar aqueles que irá procurar?
Responder1
Você pode usar a IdentitiesOnly=yes
opção junto com IdentityFile
(vejaPágina de manual ssh_config). Dessa forma, você pode especificar quais arquivos ele deve procurar.
Neste exemplo, ssh iráapenasprocure as identidades fornecidas nos arquivos ssh_config + as 4 listadas na linha de comando (as identidades fornecidas pelo agente serão ignoradas):
ssh -o IdentitiesOnly=yes \
-o IdentityFile=id1.key \
-o IdentityFile=id2.key \
-i id3.key \
-i id4.key \
[email protected]
Os formulários -i
e -o IdentityFile=
são intercambiáveis.
Em .ssh/config
, você pode incluir configurações como esta:
Host example
User user123
Hostname example.com
IdentityFile ~/.ssh/id_rsa_example
IdentityFile ~/.ssh/id_rsa_example2
IdentitiesOnly yes
Responder2
resposta curta do user76528está correto, mas acabei de ter esse problema e pensei que alguma elaboração seria útil. Você também pode se preocupar com esta solução se estiver se perguntando "Por que o ssh está ignorando minha opção de configuração do arquivo de identidade"?
Em primeiro lugar, ao contrário de todas as outras opções no ssh_config, o ssh não usa a primeira IdentityFile
que encontra. Em vez disso, a IdentityFile
opção adiciona esse arquivo a uma lista de identidades usadas. Você pode empilhar várias IdentityFile
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 agente ssh, o ssh tentará automaticamente usar as chaves no agente, mesmo que você não as tenha especificado com a opção in ssh_config
( IdentityFile
ou -i
). Este é um motivo comum pelo qual você pode receber o Too many authentication failures for user
erro. Usar a IdentitiesOnly yes
opção desativará esse comportamento.
Se você usa ssh como vários usuários para vários sistemas, recomendo colocar IdentitiesOnly yes
sua seção global de ssh_config
e colocar cada um IdentityFile
nas subseções Host apropriadas.
Responder3
Eu geralmente faço assim:
$ ssh -o IdentitiesOnly=yes -F /dev/null -i ~/path/to/some_id_rsa [email protected]
As opções são as seguintes:
-o IdentitiesOnly=yes
- diz ao SSH para usar apenas chaves fornecidas por meio da CLI e nenhuma do$HOME/.ssh
ou via ssh-agent-F /dev/null
- desabilita o uso de$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- a chave que você deseja usar explicitamente para a conexão
Exemplo
$ ssh -v -o IdentitiesOnly=yes -F /dev/null -i ~/my_id_rsa [email protected]
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /dev/null
debug1: Connecting to someserver.mydom.com [10.128.12.124] port 22.
debug1: Connection established.
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA f5:60:30:71:8c:a3:da:a3:fe:b1:6d:0b:20:87:23:e1
debug1: Host 'someserver' is known and matches the RSA host key.
debug1: Found key in /Users/sammingolelli/.ssh/known_hosts:103
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to someserver.mydom.com ([10.128.12.124]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
Last login: Tue Dec 8 19:03:24 2015 from 153.65.219.15
someserver$
Observe na saída acima que ssh
apenas identificou a my_id_rsa
chave privada por meio da CLI e a utiliza para se conectar a algum servidor.
Especificamente estas seções:
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
e:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Responder4
Use IdentityFile, mas continue usando ssh-agent para evitar solicitações de senha
A solução aceita de using IdentitiesOnly yes
significa que você nunca poderá aproveitar as vantagens do ssh-agent, resultando em solicitações repetidas de sua senha ao carregar sua chave.
Para continuar usando ssh-agent
e evitar os erros ‘Muitas falhas de autenticação’, tente isto:
Remova todos os scripts de inicialização do console interativo que carregam chaves automaticamente no
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 'muitos autenticação'. Isso simplesmente 'redefine' (exclui) o cache do agente ssh. Em seguida, tente a conexão novamente na mesma sessão. Será solicitada 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 estará lá para conexões futuras durante a mesma sessão para evitar novas solicitações.Host ex example.com User joe HostName example.com PreferredAuthentications publickey,password IdentityFile /path/to/id_rsa AddKeysToAgent yes