Некоторое программное обеспечение сервера SSH поддерживает протокол RFC 4819 для управления авторизованными ключами SSH, но это настолько редко, что его практически нет в Linux :(
grawity
3
Отличный вопрос, это действительно отсутствует функциональность ssh-copy-id для облегчения вращения клавиш.
Забуцман
1
Стоит отметить, что ssh-keygenпредоставляет -Rвозможность удаления ключей known_hosts, но, к сожалению ssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keys, не работает. Я бы использовал sedопцию ниже.
Цифровая травма
Ответы:
10
Как предположил Игнатио, это можно сделать с помощью 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на то, что существует только в ключе, который вы хотите удалить.
Как односложный по 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'
Если вы используете только символы base64 в файле открытого ключа (например, awk '{print $2}' ~/.ssh/id_rsa.pub), вам не нужно беспокоиться о экранировании каких-либо специальных символов.
Хуан
7
Нет. Вам нужно будет ввести SSH и использовать sedили grepудалить ключ из файла.
Спасибо. Я буду держать вопрос открытым немного дольше, чтобы увидеть, может ли кто-то также предоставить сценарий, который делает противоположность ssh-copy-id
grm
@grm: Я бы посоветовал вам оставить вопрос открытым навсегда, или, по крайней мере, до тех пор, пока не будет реализован ssh-undo-copy-id! ;-)
Макс Л.
0
Фил уже ответил на этот вопрос, но я хочу сделать дополнение и сделать его проще для вас. И поскольку вы запрашиваете обратный ssh-copy-id, я предполагаю, что вы хотите запустить его на авторизованном компьютере.
Ключи ssh содержат только символы base64 . Таким образом, вы можете использовать символ как разделитель, которого нет в этом списке. Давайте использовать «#».
«Комментарий» в ключе публикации может не содержать символов base64. Если у него есть «#», то ваш пример ломается. Может быть, использовать awk '{print $2}' ~/.ssh/id_rsa.pubс некоторыми sedили grep -vвместо.
ssh-keygen
предоставляет-R
возможность удаления ключейknown_hosts
, но, к сожалениюssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keys
, не работает. Я бы использовалsed
опцию ниже.Ответы:
Как предположил Игнатио, это можно сделать с помощью
grep -v
.Вот пример, который удаляет ключ, содержащий
some unique string
или просто удаляетauthorized_keys
файл, когда другой ключ не остается.Замените
some unique string
на то, что существует только в ключе, который вы хотите удалить.Как односложный по SSH это становится
Протестировано на Linux (SLES) и HP-UX.
источник
sed
лучше делать этоsed
обеспечивает компактное решение:Это сохранит оригинал
authorized_keys
вauthorized_keys.bak
. Если вы не хотите резервное копирование, просто измените-i.bak
на-i
.Вы даже можете удалить несколько ключей:
Единственный хитрый момент - специальные символы в регулярном выражении, которые необходимо экранировать .
источник
awk '{print $2}' ~/.ssh/id_rsa.pub
), вам не нужно беспокоиться о экранировании каких-либо специальных символов.Нет. Вам нужно будет ввести SSH и использовать
sed
илиgrep
удалить ключ из файла.источник
Фил уже ответил на этот вопрос, но я хочу сделать дополнение и сделать его проще для вас. И поскольку вы запрашиваете обратный ssh-copy-id, я предполагаю, что вы хотите запустить его на авторизованном компьютере.
Ключи ssh содержат только символы base64 . Таким образом, вы можете использовать символ как разделитель, которого нет в этом списке. Давайте использовать «#».
Замените имя хоста на IP-адрес сервера.
Опция PasswordAuthentication приведет к сбою ssh, если он спросит пароль
источник
awk '{print $2}' ~/.ssh/id_rsa.pub
с некоторымиsed
илиgrep -v
вместо.