Есть ли команда (или однострочная) для удаления ключа ssh на сервере? Что-то вроде противоположности ssh-copy-id?
4 ответа
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
Единственный хитрый момент здесь - это экранирование специальных символов в регулярном выражении.
Как предположил Игнатио, это можно сделать с помощью 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.
Нету. Вам нужно войти в SSH и использовать sed
или grep
чтобы удалить ключ из файла.
Фил уже ответил на этот вопрос, но я хочу сделать дополнение и сделать его проще для вас. И поскольку вы запрашиваете обратный 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, если он спросит пароль