Есть ли однострочная команда, чтобы указать 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», но мне нужно что-то идемпотентное, которое я могу запустить регулярно. С >>
размер файла каждый раз будет увеличиваться.
Мне неизвестна такая локальная команда. Мне не нравится 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
Теперь есть повар авторизованные ключи поваренная книга. Вы просто добавляете свой ключ в свою кулинарную книгу следующим образом:
ssh_authorize_key 'bob@acme.com' do
key 'AAAAB3NzaC1yc2EAAAADAQABAAABAQCctNyRouVDhzjiP[...]'
user 'root'
end
Обратите внимание, что если вы используете эту поваренную книгу, все ключи, добавленные вручную, будут удалены.