Como desfazer um ssh-copy-id?

15

Eu tenho um cluster hadoop de 2 nós.

Eu executei este comando no mestre:

$ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub [email protected]

Como posso desfazer isso? Na verdade, eu gostaria de reatribuir a chave.

192.168.1.1 é o escravo.

eu--''''''---------''''''''''''
fonte

Respostas:

20

Identifique a chave pública que você copiou ao executar ssh-copy-id:

cat ~/.ssh/id_rsa.pub

SSH para o servidor para o qual você copiou a chave:

ssh [email protected]

Editar o arquivo ~hadoop/.ssh/authorized_keysem 192.168.1.1usar o seu editor preferido, e apagar a linha que contém a sua chave.

David Edwards
fonte
1
Existe uma maneira de fazê-lo mais automaticamente por quê? Comossh-rm-id [email protected]
SR
@ SR Não conheço um único comando que automatize isso. Em teoria, você pode "automatizá-lo" com um pouco de uma linha, usando sshpara executar um sedcomando (ou similar) para editar ~/.ssh/authorized_keyse remover a linha. Veja superuser.com/questions/429954/…
David Edwards
4

Se você fez algo ssh-copy-idparecido:

remote='user@machine'
ssh-copy-id -i $remote

Assim, você pode acessar esta máquina remota sem usar uma senha:

ssh $remote

Para desfazê-lo de uma maneira sistemática, você pode criar um script como:

idssh=$(awk '{print $2}' ~/.ssh/id_rsa.pub)
ssh $remote "sed -i '#$idssh#d' .ssh/authorized_keys"

Eu o uso em scripts, preciso de scpvários arquivos, então peço apenas uma vez a senha.

Javi M.
fonte
1
Isso pode ser um pouco perigoso: você está procurando o campo de comentário da chave. É uma sequência arbitrária sem qualquer significado e pode estar contida mais de uma vez. Eu grep para a AAA....==cadeia longa (a chave real) ou para a linha completa de id_rsa.pub. Mas +1 para mostrar como automatizar a remoção de uma chave.
precisa saber é o seguinte
1
@PerlDuck você está certo. É muito melhor usar a chave ($ 2) do que o terceiro campo. Obrigado.
Javi M.
@Javi M. Encontrei outro problema. A barra usada por padrão como delimitador no sed estava na minha chave pública. Como resultado, achei melhor usar um ponto-e-vírgula como o delimitador sed, pois parece improvável que apareça na chave pública. Para fazer isso, foi necessário primeiro escapar do personagem. Acabei com algo como isto:ssh $remote "sed -i '\;$idssh;{d}' .ssh/authorized_keys"
ccalvert
Aqui estão algumas informações sobre quais caracteres podem terminar em uma chave pública.
ccalvert
Obrigado @ccalvert. Com base no seu comentário sugerido, eu aprovei a edição chris-maes
Javi M.