Comando para remover uma chave autorizada ssh no servidor

Comando para remover uma chave autorizada ssh no servidor

Existe um comando (ou one-liner) para remover uma chave ssh em um servidor? Algo como o oposto de ssh-copy-id?

Responder1

Como Ignatio sugeriu, isso pode ser feito com grep -v.

Aqui está um exemplo que remove a chave que contém some unique stringou apenas exclui o authorized_keysarquivo quando nenhuma outra chave permanece.

if test -f $HOME/.ssh/authorized_keys; then
  temp_file=$(mktemp)
  if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then
    cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file;
  else
    rm $HOME/.ssh/authorized_keys && rm $temp_file;
  fi;
fi

Substitua some unique stringpor algo que exista apenas na chave que você deseja remover.

Como um oneliner sobre ssh isso se torna

ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then temp_file=$(mktemp); if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file; else rm $HOME/.ssh/authorized_keys && rm $temp_file; fi; fi'

Testado em Linux (SLES) e HP-UX.

Responder2

sedfornece uma solução compacta:

sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys

Isso salvará o original authorized_keysem formato authorized_keys.bak. Se você não quiser o backup, basta mudar -i.bakpara -i.

Você pode até remover várias chaves:

sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys

A única parte complicada aqui écaracteres especiais na regex precisam ser escapados.

Responder3

Não. Você precisará fazer o SSH e usar sedou grepremover a chave do arquivo.

Responder4

Phil já respondeu a essa pergunta, mas quero fazer uma adição e facilitar para você. E como você está solicitando o inverso do ssh-copy-id, presumo que você deseja executá-lo em uma máquina autorizada.

chaves ssh contém apenasbase64personagens. Então você pode usar um char como delimitador sed que não está nessa lista. Vamos usar '#'.

ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"

Substitua o nome do host pelo IP do servidor.

A opção PasswordAuthentication causará falha no ssh se solicitar senha

informação relacionada