Есть ли команда (или однострочник) для удаления ключа ssh на сервере? Что-то вроде противоположности ssh-copy-id?
решение1
Как предположил Игнатио, это можно сделать с помощью grep -v
.
Вот пример, который удаляет ключ, содержащий файл some unique string
, или просто удаляет authorized_keys
файл, когда других ключей не остается.
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
Замените some unique string
его чем-то, что существует только в том ключе, который вы хотите удалить.
В качестве однострочника по ssh это становится
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'
Протестировано на Linux (SLES) и HP-UX.
решение2
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
Единственная сложность здесь в том,специальные символы в регулярном выражении необходимо экранировать.
решение3
Нет. Вам нужно будет подключиться по SSH и использовать sed
или , grep
чтобы удалить ключ из файла.
решение4
Фил уже ответил на этот вопрос, но я хочу сделать дополнение и облегчить вам задачу. И поскольку вы спрашиваете об обратном ssh-copy-id, я предполагаю, что вы хотите запустить его на авторизованной машине.
ключи ssh содержат толькоbase64символы. Так что вы можете использовать символ в качестве разделителя sed, которого нет в этом списке. Давайте используем '#'.
ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"
Замените имя хоста на IP-адрес сервера.
Параметр PasswordAuthentication приведет к сбою ssh, если он запросит пароль