Как отменить ssh-copy-id?

15

У меня есть 2 узла Hadoop кластера.

Я выполнил эту команду на мастере:

$ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@192.168.1.1

Как я могу отменить это? Я бы на самом деле хотел переназначить ключ.

192.168.1.1 это раб.

л --''''''--------- «» «» «» «» «» «»
источник

Ответы:

20

Определите открытый ключ, который вы скопировали при запуске ssh-copy-id:

cat ~/.ssh/id_rsa.pub

SSH на сервер, на который вы скопировали ключ:

ssh hadoop@192.168.1.1

Отредактируйте файл ~hadoop/.ssh/authorized_keysна с 192.168.1.1помощью текстового редактора и удалите строку , содержащую ключ.

Дэвид Эдвардс
источник
1
Есть ли способ сделать это более автоматическим, почему? Лайкssh-rm-id hadoop@192.168.1.1
СР
@SR Я не знаю ни одной команды, которая автоматизирует это. Теоретически, вы могли бы «автоматизировать» сам с небольшим однострочника помощью sshзапустить sedкоманду (или аналогичный) для редактирования ~/.ssh/authorized_keysи удаления строки. См. Superuser.com/questions/429954/…
Дэвид Эдвардс
4

Если вы сделали ssh-copy-idкак:

remote='user@machine'
ssh-copy-id -i $remote

Таким образом, вы можете получить доступ к этому удаленному компьютеру без использования пароля:

ssh $remote

Чтобы отменить это систематическим способом, вы можете написать что-то вроде:

idssh=$(awk '{print $2}' ~/.ssh/id_rsa.pub)
ssh $remote "sed -i '#$idssh#d' .ssh/authorized_keys"

Я использую его в скриптах, мне нужно scpнесколько файлов, поэтому я спрашиваю только один раз пароль.

Хави М.
источник
1
Это может быть немного опасно: вы ищете поле комментария ключа. Это произвольная строка без какого-либо значения, которая может содержаться более одного раза. Я бы grep либо для длинной AAA....==строки (фактический ключ) или для полной строки из id_rsa.pub. Но +1 за показ того, как автоматизировать удаление ключа.
PerlDuck
1
@ PerlDuck ты прав. Гораздо лучше использовать сам ключ ($ 2), чем третье поле. Спасибо.
Хави М.
@Javi M. Я столкнулся с другой проблемой. Косая черта, используемая по умолчанию в качестве разделителя в sed, была в моем открытом ключе. В результате я обнаружил, что лучше всего использовать точку с запятой в качестве разделителя sed, поскольку вряд ли он будет отображаться в открытом ключе. Для этого нужно было сначала сбежать от персонажа. Я закончил что-то вроде этого:ssh $remote "sed -i '\;$idssh;{d}' .ssh/authorized_keys"
ccalvert
Вот некоторая информация о том, какие символы могут оказаться в открытом ключе.
Калкаверт
Спасибо @ccalvert. На основании вашего предложенного комментария я одобрил издание Крис-Маес
Хави М.