Команда ssh для добавления открытого ключа к локальному ʻauthorized_keys` ?

Есть ли однострочная команда, чтобы указать SSH добавить предоставленный открытый ключ в файл authorized_keys локального компьютера? Локальная версия ssh-copy-id ?

Я пишу рецепт шеф-повара и хочу убедиться, что конкретный открытый ключ ssh установлен для определенного пользователя. Я мог каждый раз перезаписывать файл ~ / .ssh / authorized_keys , или попробуйте какой-нибудь хитрый способ добавить строку, но если есть официальная команда, она будет более надежной и предотвратит дублирование.

Что-то вроде:

ssh-add-local-key "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDeblahdeblah user@somwhere"

Для подходящих систем, таких как Ubuntu или Debian, существует apt-add-repository , поэтому мне интересно, есть ли эквивалент SSH.

Обновление : я знаю, что могу использовать «echo blah >> authorized_keys», но мне нужно что-то идемпотентное, которое я могу запустить регулярно. С >> размер файла каждый раз будет увеличиваться.

0
задан 19 October 2017 в 16:29
3 ответа

Мне неизвестна такая локальная команда. Мне не нравится ssh-copy-id foo @ localhost (потому что он открывает SSH-соединение)и еще меньше мне нравится подверженность ошибкам echo foo >> ~ / .ssh / authorized_keys .

Но поскольку вы используете chef, почему бы вам не использовать инструменты chef (в основном рубин) есть в наличии?

Например:

ruby_block "authorized_keys" do
  block do
    file = Chef::Util::FileEdit.new("/home/#{username}/.ssh/authorized_keys")
    file.insert_line_if_no_match("/#{authorized_key}/", "#{authorized_key}")
    file.write_file
  end
end

insert_line_if_no_match документация:

#insert_line_if_no_match(regex, newline) ⇒ Object

искать файл построчно и сопоставлять каждую строку с заданным регулярным выражением, если оно не совпадает, вставлять новую строку в конец файла

Мне это не кажется таким уж хакерским и предоставляет простой для понимания способ решения вашей проблемы.

Другой альтернативой может быть ответ Билла Уорнерса на аналогичный вопрос: https: / /stackoverflow.com/a/28283354/2376817[1295 impression

1
ответ дан 4 December 2019 в 16:06

Теперь есть повар авторизованные ключи поваренная книга. Вы просто добавляете свой ключ в свою кулинарную книгу следующим образом:

ssh_authorize_key 'bob@acme.com' do
  key 'AAAAB3NzaC1yc2EAAAADAQABAAABAQCctNyRouVDhzjiP[...]'
  user 'root'
end

Обратите внимание, что если вы используете эту поваренную книгу, все ключи, добавленные вручную, будут удалены.

0
ответ дан 4 December 2019 в 16:06

предложение: запустить ssh-copy-id на петле (localhost).

ssh-copy-id localhost
0
ответ дан 10 February 2020 в 14:06

Теги

Похожие вопросы