26

Есть ли команда (или однострочная) для удаления ключа ssh на сервере? Что-то вроде противоположности ssh-copy-id?

4 ответа4

23

sed предоставляет компактное решение:

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

Это сохранит оригинальные authorized_keys в authorized_keys.bak . Если вам не нужна резервная копия, просто измените -i.bak на -i .

Вы даже можете удалить несколько ключей:

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

Единственный хитрый момент здесь - это экранирование специальных символов в регулярном выражении.

9

Как предположил Игнатио, это можно сделать с помощью grep -v .

Вот пример, который удаляет ключ, содержащий some unique string или просто удаляет файл authorized_keys когда не осталось другого ключа.

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

Замените some unique string чем-то, что существует только в ключе, который вы хотите удалить.

В качестве seliner над ssh это становится

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'

Протестировано на Linux (SLES) и HP-UX.

6

Нету. Вам нужно войти в SSH и использовать sed или grep чтобы удалить ключ из файла.

0

Фил уже ответил на этот вопрос, но я хочу сделать дополнение и сделать его проще для вас. И поскольку вы запрашиваете обратный ssh-copy-id, я предполагаю, что вы хотите запустить его на авторизованном компьютере.

Ключи ssh содержат только символы base64 . Таким образом, вы можете использовать символ как разделитель, которого нет в этом списке. Давайте использовать «#».

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

Замените имя хоста на IP-адрес сервера.

Опция PasswordAuthentication приведет к сбою ssh, если он спросит пароль

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .