Здравствуйте, я ищу помощь в поиске /root/.ssh/authorized_keys
для данного открытого ключа (назовите его $ pub_key) и удалите его. Хотите сделать это в сценарии bash.
Как лучше всего этого добиться?
Бы grep -v $pub_key /root/.ssh/authorized_keys > /tmp/authorized_keys.new
работай? Вы можете сравнить два файла, чтобы проверить работу. Учитывая длинные строки случайных символов, которые составляют ключи, вероятно, достаточно сделать это, используя подстроку $ pub_key.
Я думаю, мне нужно использовать sed, но не могу понять синтаксис, вот что у меня есть:
sed -i '/$pub_key/ d' /root/.ssh/authorized_keys
Удалите пробел перед d
, он будет работать так, как вы ожидаете:
sed -i '/$pub_key/d' /root/.ssh/authorized_keys
Никогда не забывайте о мощи perl oneliners!
$pub_key="AAAABCD"; perl -i "/$pub_key/ or print" /root/.ssh/authorized_keys
Это приведет к редактированию на месте и удалению проблемного ключа.
Или, возможно, у вас действительно очень длинный файл authorized_keys, и вы хотите обрабатывать его параллельно с GNU parallel?
pub_key="AAAABCD"; parallel -k "echo {} | grep -v $pub_key" </root/.ssh/authorized_keys
возможности безграничны.
update: исправлена опечатка, на которую указал Оле. Спасибо Оле!