Acho que -i
a opção do ssh é designar o arquivo de chave.
Descobri que podia ser autenticado pelo github.com com qualquer arquivo, mesmo um vazio, como na captura de tela a seguir.
Mas depois de reiniciar, não consigo mais ser autenticado.
Observando isso, acho que o comando ssh lembra as chaves que já foram usadas e as usa automaticamente quando falha com a chave fornecida pela -i
opção.
Está certo? Acho que esse é um comportamento muito antinatural e tenho certeza de que entendi errado alguma coisa.
A resposta depende da implementação que
ssh
você está usando e da sua configuração. Aqui, mostrarei uma configuração possível envolvendossh
o OpenSSH; para essa configuração em particular, a resposta simplificada é sim.Configuração possível
Primeira coisa:
-i /the/key
por si só não impedessh
o uso de outras chaves. Ele impedessh
o retorno às chaves padrão (~/.ssh/id_rsa
,~/.ssh/id_ecdsa
,~/.ssh/id_ecdsa_sk
,~/.ssh/id_ed25519
,~/.ssh/id_ed25519_sk
), mas se sua configuração (~/.ssh/config
e/etc/ssh/ssh_config
) especificar chave(s) adicional(ais) (IdentityFile
diretiva(s)), então será como se você tivesse usado várias-i
opções: várias chaves serão tentadas uma por uma até que uma seja aceita ou a lista seja esgotada.No seu caso, se a chave correta veio da configuração, ela seria usada também após a reinicialização. Isso não aconteceu, então deve ter havido outra coisa.
Outra fonte de chaves (mesmo se você usar
-i
) pode ser um agente. Por favor, leia "entendimentossh-agent
" nesta minha outra resposta . Não precisa ser exatamentessh-agent
, há outros programas que podem assumir seu papel. De qualquer forma, pode haver um agente em execução.Vamos supor que haja um agente em execução. Quando você usa
ssh -i
com uma chave (por exemplo, com a chave certa no seu caso),ssh
pode ou não adicionar a chave ao agente. Isso é governado pelaAddKeysToAgent
opção:O valor padrão para
AddKeysToAgent
éno
, mas se o administrador colocouAddKeysToAgent yes
em/etc/ssh/ssh_config
(ou se esse valor veio com a distribuição) ou se você colocou a linha em seu~/.ssh/config
(e talvez tenha esquecido), então o valor pode seryes
para seussh
.Vamos supor que o valor seja
yes
e, portanto, a chave correta foi adicionada ao agente. Se você usarssh
novamente, dessa vez com-i /wrong/key
, então a chave do agente pode ou não ser usada. Isso é governado pelaIdentitiesOnly
opção:Se esta opção for
no
(o padrão), as chaves armazenadas no agente serão usadas. (Observe que há outros provedores possíveis, mas não vou entrar em detalhes).Tudo isso significa que se houver um agente em execução e if
AddKeysToAgent
isyes
(ou similar) e ifIdentitiesOnly
isno
então o que você observou é o comportamento esperado. Neste caso, a resposta simplificada para sua pergunta é sim. A resposta estrita não simplificada é: não,ssh
ele mesmo não lembra chaves privadas (masssh-agent
lembra).Como confirmar
Para verificar se há um agente, execute:
Se
SSH_AUTH_SOCK
existir no ambiente, então provavelmente um agente está em execução. É possível que seu ambiente de desktop execute um agente para você toda vez que você fizer login nele e você não estava ciente até este ponto. SeSSH_AGENT_PID
existir no ambiente, então você pode investigar mais com, por exemplops -u -p "$SSH_AGENT_PID"
, .Você pode ver a configuração relevante
ssh
(do OpenSSH) executandossh -G
:Note que a saída pode incluir
IdentityFile
linhas diferentes, dependendo se/tmp/hoge
existe ou não. O arquivo existia quando você observou o "problema", então certifique-se de que ele existe agora quando estiver usandossh -G
.ssh -G
não mostrará quais chaves foram adicionadas ao agente. Para vê-las, consulte o agente:Reinicie e replique o "issue", invocando
ssh-add -l
antes e depois de cadassh
. Dessa forma, você saberá se essa resposta explica o que acontece no seu caso em particular.Mesmo que isso não seja (ou não seja exatamente) o que acontece no seu caso específico, o cenário é plausível e a resposta pode ser útil para outros.
Sua captura de tela parece com o macOS, que pelo que me lembro tem um patch personalizado para OpenSSH para adicionar automaticamente chaves privadas ao seu ssh-agent (Keychain?). Use
ssh-add -l
para listá-las essh-add -D
para limpá-las.(Isso é anterior à opção padrão AddKeysToAgent que o OpenSSH obteve posteriormente, então não sei se é configurável.)
A
-i
opção não é exclusiva com o uso do agente; a chave especificada será tentada primeiro , mas as outras chaves disponíveis (incluindo aquelas do ssh-agent) permanecerão na lista. Use-oIdentitiesOnly=true
para alterar esse comportamento.