Como remover uma chave ssh?


154

Atualmente, tenho uma chave SSH antiga carregada em um servidor. O problema é que perdi meu ~/.sshdiretório (com o original id_rsae os id_rsa.pubarquivos).

Consequentemente, desejo remover a chave SSH antiga diretamente no servidor e fazer upload de uma nova.

Eu tentei o seguinte comando sem sucesso:

$> ssh-add -D

insira a descrição da imagem aqui

Existe uma maneira de remover completamente uma chave SSH?


Com o que ssh-add -d?
user2196728

5
caramba, é ssh-add -D, maiúscula #
Alexander Mills

Verifique seus soquetes que estão sendo usados ​​pelo seu ssh-agent (1).
Dwight Spencer

Respostas:


129

Observe que há pelo menos dois relatórios de erros para ssh-add -d/-D não remover chaves:

O problema exato é:

ssh-add -d/-Dexclui apenas as chaves adicionadas manualmente do gnome-keyring.
Não há como excluir chaves adicionadas automaticamente.
Este é o bug original e ainda está definitivamente presente.

Portanto, por exemplo, se você tiver duas identidades ssh carregadas automaticamente associadas a duas contas diferentes do GitHub - digamos, para trabalho e para casa - não há como alternar entre elas. O GitHub adota o primeiro que corresponder, para que você sempre apareça como usuário 'doméstico' no GitHub, sem nenhuma maneira de fazer o upload de itens para os projetos de trabalho.

Permitir ssh-add -da aplicação em chaves carregadas automaticamente (e ssh-add -t Xalterar a vida útil das chaves carregadas automaticamente) restauraria o comportamento que a maioria dos usuários espera.


Mais precisamente, sobre o problema:

O culpado é gpg-keyring-daemon:

  • Ele subverte a operação normal do ssh-agent, principalmente para que ele possa abrir uma caixa bonita na qual você pode digitar a senha para uma chave ssh criptografada.
  • E vasculha seu .sshdiretório e adiciona automaticamente as chaves que encontra ao seu agente.
  • E não permitirá que você exclua essas chaves.

Como odiamos isso? Não vamos contar os caminhos - a vida é muito curta.

A falha é agravada porque os clientes ssh mais novos tentam automaticamente todas as chaves do seu agente ssh ao se conectar a um host.
Se houver muitos, o servidor rejeitará a conexão.
E como o gnome-keyring-daemon decidiu por si próprio quantas chaves você deseja que o seu ssh-agent tenha, e as carregou automaticamente, E NÃO DEIXE DELE EXCLUÍ-LO, você está brindando.

Esse bug ainda está confirmado no Ubuntu 14.04.4, há dois dias (21 de agosto de 2014)


Uma possível solução alternativa:

  • Faça ssh-add -Dpara excluir todas as suas chaves adicionadas manualmente . Isso também bloqueia as chaves adicionadas automaticamente, mas não é muito útil, pois gnome-keyringsolicitará que você as desbloqueie de qualquer maneira quando tentar fazer um git push.
  • Navegue até sua ~/.sshpasta e mova todos os seus arquivos de chave, exceto aquele com o qual você deseja se identificar, para uma pasta separada chamada backup. Se necessário, você também pode abrir o cavalo marinho e excluir as chaves de lá.
  • Agora você deve poder fazer git pushsem problemas.

Outra solução alternativa:

O que você realmente deseja fazer é desligar gpg-keyring-daemoncompletamente.
Vá para System --> Preferences --> Startup Applicationse desmarque a SSH Key Agent (Gnome Keyring SSH Agent)caixa " " - você precisará rolar para baixo para encontrá-la.

Você ainda receberá um ssh-agent, mas agora ele se comportará de maneira saudável: nenhuma chave é carregada automaticamente, você executa o ssh-add para adicioná-las e, se quiser excluir as chaves, pode. Imagine isso.

Esses comentários realmente sugerem:

A solução é evitar gnome-keyring-managera inicialização, o que foi estranhamente difícil, finalmente alcançado com a remoção da permissão de execução do arquivo de programa.


Ryan Lue acrescenta outro caso interessante nos comentários :

Caso isso ajude alguém: eu até tentei excluir os arquivos id_rsae id_rsa.pubcompletamente, e a chave ainda estava aparecendo.

Acontece que os gpg-agentestava armazenando em cache em um ~/.gnupg/sshcontrolarquivo ; Eu tive que excluí-los manualmente a partir daí.

Esse é o caso quando okeygrip foi adicionado como aqui .


1
Outra opção no Ubuntu 14-16 é usar o gui 'Senhas e chaves' (você pode procurar pelo ssh para encontrá-lo). Escolha quais, por exemplo, chaves OpenSS, clique com o botão direito na chave e escolha excluir. Pode ser necessário reiniciar o sistema para ver se ele foi removido.
precisa saber é o seguinte

2
Por que essas informações são sobre a resposta selecionada ssh-agente ssh-adda? O pôster original dizia que ele queria remove the old SSH key directly on the server and upload a new one. Parece que ele deseja editar ~/.ssh/authorized_keysno host remoto.
H2ONaCl 26/01

1
Essa resposta me levou a resolver um problema aparecendo com o encaminhamento ssh ativado. Passar de uma máquina Ubuntu 16.04 para um sistema debian em que todas as credenciais ssh estão sendo encaminhadas git cloneestava usando a primeira chave da cadeia, em vez da versão no arquivo de configuração na caixa Ubuntu. A chave ruim estava sendo sugada automaticamente e encaminhada para a caixa Debian.
Redfive

1
Esta é uma verdadeira dor nas costas. Estou trabalhando em projetos da empresa e contratado para trabalhar em outra empresa. Isso apenas adiciona tempo perdido ao gerenciamento de ambos. Espero que uma correção chegue em breve!
precisa saber é o seguinte

1
Caso isso ajude alguém: eu até tentei excluir os arquivos id_rsae id_rsa.pubcompletamente, e a chave ainda estava aparecendo. Acontece que o gpg-agent os estava armazenando em cache em um ~/.gnupg/sshcontrolarquivo; Eu tive que excluí-los manualmente a partir daí.
Ryan Lue 28/01

10

Se você está tentando executar uma operação relacionada ao ssh e obtém o seguinte erro:

$ git fetch
no such identity: <ssh key path>: No such file or directory

Você pode remover a chave ssh ausente do seu agente ssh com o seguinte:

$ eval `ssh-agent -s`  # start ssh agent
$ ssh-add -D <ssh key path>  # delete ssh key

9

A menos que eu esteja entendendo errado, você perdeu o .sshdiretório que contém sua chave privada em sua máquina local e, portanto, deseja remover a chave pública que estava em um servidor e que permitia o login baseado em chave. Nesse caso, ele será armazenado no .ssh/authorized_keysarquivo em seu diretório pessoal no servidor. Você pode simplesmente editar este arquivo com um editor de texto e excluir a linha relevante se puder identificá-lo (ainda mais fácil se for a única entrada!). Espero que essa chave não tenha sido seu único método de acesso ao servidor e você tenha alguma outra maneira de efetuar login e editar o arquivo. Você pode adicionar manualmente uma nova chave pública ao authorised_keysarquivo ou usar ssh-copy-id. De qualquer forma, você precisará da autenticação de senha configurada para sua conta no servidor ou de alguma outra identidade ou método de acesso para acessar o authorized_keysarquivo no servidor.

ssh-addadiciona identidades ao seu agente ssh, que lida com o gerenciamento local de suas identidades e "a conexão ao agente é encaminhada através de logins remotos SSH, e o usuário pode, assim, usar os privilégios dados pelas identidades em qualquer lugar da rede de maneira segura". (página de manual), então não acho que seja o que você deseja neste caso. Não tem como colocar sua chave pública em um servidor sem que você tenha acesso ao servidor por meio de um login ssh, até onde eu sei.


Excluí este arquivo e ainda consigo conectar. Portanto, definitivamente não estava contido aqui ... Era uma chave adicionada automaticamente, mas ainda não existe em nenhum lugar.
Larry

5

Abri o aplicativo "Senhas e Chaves" no Unity e removi chaves indesejadas das Chaves Seguras -> Chaves OpenSSH E elas foram automaticamente removidas do ssh-agent -l também.


2
Cuidado, pois isso também os exclui do diretório~/.ssh
Peter V. Mørch

1

Posso confirmar que esse bug ainda está presente no Ubuntu 19.04. A solução alternativa sugerida pelo @VonC funcionou perfeitamente, resumindo a minha versão:

  • Clique na guia Atividades no canto superior esquerdo
  • Na caixa de pesquisa exibida, comece a digitar "aplicativos de inicialização"
  • Clique no ícone "Aplicativos de inicialização"
  • Na caixa exibida, selecione o aplicativo gerenciador de anel de chave do gnome (não consegue lembrar o nome exato na GUI, mas é distinto o suficiente) e remova-o.

O que eu fiz seguinte foi para tentar ssh-add -Dnovamente, e após a reinicialização ssh-add -lme disse O agente não tem identidades. Confirmei que ainda tinha o ssh-agentdaemon em execução ps aux | grep agent. Então eu adicionei a chave que eu mais uso no GitHub ( ssh-add ~/.ssh/id_ecdsa) e está tudo bem!

Agora eu posso fazer as operações normais com meu repositório usado com mais frequência e, se ocasionalmente precisar de acesso ao outro repositório que usa a chave RSA, apenas dedico um terminal para ele export GIT_SSH_COMMAND="ssh -i /home/me/.ssh/id_rsa.pub". Resolvido! O crédito é atribuído ao @VonC por apontar o bug e a solução.


1

Marque a tecla .ssh ou não no seu sistema

  1. Vá para a pasta -> /Users/administrator/.ssh/id_ed25519.pub

Se não for

  1. Terminal aberto.

Passado no terminal

  1. Verificar usuário -> ssh -T git@gitlab.com

Remover chave .ssh existente

  1. Remova a chave .ssh existente -> rm ~ / .ssh / github_rsa.pub

Crie um novo

  1. Criar nova chave .ssh -> ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  2. A chave pública foi salva em "/Users/administrator/.ssh/id_ed25519.pub".

  3. Abra o caminho salvo da chave pública.
  4. Copie a chave .ssh -> Conta do GitLab -> Configuração -> Chave SSH -> Adicionar chave
  5. Teste novamente a partir do terminal -> ssh -T git@gitlab.com

0

A solução para mim (OpenSuse Leap 42.3, KDE) foi renomear a pasta ~/.gnupgque aparentemente continha as chaves e perfis em cache. Após o logoff / logon do KDE, o ssh-add / agent está sendo executado novamente e a pasta é criada do zero, mas as chaves antigas desapareceram.

Não tive sucesso com as outras abordagens.

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.