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 string
ou apenas exclui o authorized_keys
arquivo 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 string
por 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
sed
fornece uma solução compacta:
sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys
Isso salvará o original authorized_keys
em formato authorized_keys.bak
. Se você não quiser o backup, basta mudar -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 na regex precisam ser escapados.
Responder3
Não. Você precisará fazer o SSH e usar sed
ou grep
remover 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