Comando para remover uma chave autorizada ssh no servidor

25

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

    
por grm 29.05.2012 / 08:21

4 respostas

9

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

Aqui está um exemplo que remove a chave contendo some unique string ou apenas exclui o arquivo authorized_keys quando nenhuma outra chave permanece.

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

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

Como um oneliner sobre o ssh, isso se torna

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

Testado no Linux (SLES) e no HP-UX.

    
por 30.06.2014 / 19:13
21

sed fornece uma solução compacta:

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

Isso salvará o authorized_keys original em authorized_keys.bak . Se você não quiser o backup, altere apenas -i.bak para -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 no regex precisam ser ignorados .

    
por 14.03.2016 / 15:05
6

Não. Você precisará do SSH e usar sed ou grep para remover a chave do arquivo.

    
por 29.05.2012 / 08:24
0

Phil já respondeu a essa pergunta, mas quero fazer mais e facilitar para você. E desde que você está pedindo reverso de ssh-copy-id, estou assumindo que você deseja executá-lo em uma máquina autorizada.

ssh keys contém apenas caracteres base64 . Portanto, você pode usar um caractere como delimitador sed que não esteja 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 fará com que o ssh falhe se perguntar a senha

    
por 14.02.2018 / 07:55

Tags