Как я могу переместить мой ключ развертывания в Vagrant?

9

Я хотел бы переместить ключ ssh в vagrant и вставить их ~/.ssh, какой самый простой способ сделать это? У меня есть следующее в моем файле Vagrant:

config.vm.synced_folder "conf.d", "/svr/conf.d"
config.vm.provision :shell, 
:inline => "ls -l /svr/conf.d/.ssh"

всего 4-го-первого - одного бродячего бродяги 1670 26 марта 08:19 id_rsa.mediapop

config.vm.provision :shell, 
:inline => "cp /svr/conf.d/.ssh/id_rsa.mediapop /home/ubuntu/.ssh/id_rsa"
config.vm.provision :shell, 
:inline => "ls -l /home/ubuntu/.ssh"

всего 4 -rw ------- 1 ubuntu ubuntu 0 мар 22 08:56 author_keys -rw-r - r-- 1 root root 1670 мар 26 08:59 id_rsa

но потом, когда я делаю, vagrant ssh -c "ls -l ~/.ssh"я получаю:

$ vagrant ssh -c "ls -l ~/.ssh"
total 4
-rw-r--r-- 1 vagrant vagrant 409 Mar 20 04:47 authorized_keys

Так что Бродяга переписывает мой .sshкаталог.

Кит Сунде
источник

Ответы:

13

Я положил свой SSH файл, conf.d/.ssh/id_rsa.medipopа затем сделал:

config.vm.synced_folder "conf.d", "/svr/conf.d"
config.vm.provision :shell, 
:inline => "cp /svr/conf.d/.ssh/id_rsa.mediapop /home/vagrant/.ssh/id_rsa"

Это сработало великолепно, как только я понял, что бродячий пользователь - vagrantнет ubuntu(вот почему я был озадачен своим вопросом о том, почему мой ключ ssh, казалось, исчез).

Кит Сунде
источник
Это способ для окон, где переадресация агентов не работает.
Маркус
работает, но получаю эту ошибку, ==> по умолчанию: stdin: не tty и права доступа меняются и должны быть сброшены, будет ли работать с sudo off fix?
Радтек
12

Как насчет переадресации агентов SSH?

Убедитесь, что ваш SSH-ключ сначала работает локально, а затем добавьте его config.ssh.forward_agent = trueк вашему Vagrantfile.

Бродячие подробности здесь: http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html

rjocoleman
источник
Я устал от этого, так как планирую раздать коробку с надписью нашим дизайнерам, которые, вероятно, посмеются на меня, если начнут ссылаться на брелки как компьютерные вещи. :) Спасибо хоть!
Кит Санде
В этом случае я бы либо собрал свой собственный ящик с VeeWee и распространил его как пакет, config.ssh.private_key_pathлибо сделал бы что-нибудь ужасное, например, наличие ключа ssh в папке проекта с Vagrantfile. В случае использования его нужно как-то распространять, так что выбирайте свое зло!
rjocoleman
1
Это почти тот же вопрос: superuser.com/a/570775/210384
rjocoleman
5

Вы можете использовать основной файловый модуль Ruby, например:

  config.vm.provision "shell" do |s|
    ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
    s.inline = <<-SHELL
      echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
      echo #{ssh_pub_key} >> /root/.ssh/authorized_keys
    SHELL
  end

Я действительно удивлен, что Vagrant не предоставляет это по умолчанию!

мяу
источник
Я бы рекомендовал также добавлять кавычки вокруг echoаргументов: echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keysи echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Это также будет работать, если открытый ключ SSH содержит специальные символы (например, ().
tjanez
1

Посмотрите на Vagrant Shell Provisioner , вы добавите это в свой Vagrantfile.

Однако, в зависимости от того, чего вы пытаетесь достичь, вероятно, лучше использовать прилагаемый ключ ssh для доступа к Vagrant.

Чтобы сгенерировать файл быстрой конфигурации, который будет добавлен к вам ~/.ssh/config, в том числе запустить строку идентификатора файла $ vagrant ssh-config. Вы могли бы тогда, $ ssh you-vagrant-boxа не $ vagrant ssh.

rjocoleman
источник
1
Ах, это не для SSH'ов в моей коробке, это для того, чтобы дать бродячий доступ к моим git репозиториям. Поэтому мне нужно переместить файл с моего хоста в ~ / .ssh /
Kit Sunde
1
Это более понятно! В своем редактировании выше вы уверены, что ~/и /home/ubuntuв том же месте? По умолчанию Vagrant homedir /home/vagrant.
rjocoleman
Не забывайте, что ваш Vagrantfile полностью интерпретируется как ruby, поэтому вы можете сделать что-то вроде: git_ssh_key = File.read('/svr/conf.d/.ssh/id_rsa.mediapop'); config.vm.provision :shell, :inline => "cat >>/home/vagrant/.ssh/id_rda.mediapop <<EOF #{git_ssh_key} EOF" Вы можете столкнуться с проблемами прав доступа при чтении ключа ssh.
rjocoleman
1
Мне удалось скопировать файл в ~/.sshсинхронизированную папку и cp, но кажется, что Vagrant перезаписывает его впоследствии.
Кит Санде
0

Для перемещения как закрытых, так и открытых ключей будет работать следующее:

config.vm.provision "shell" do |s|
  ssh_prv_key = File.read("#{Dir.home}/.ssh/id_rsa")
  ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
  s.inline = <<-SHELL
    echo Provisioning public ssh key...
    [ -e /home/vagrant/.ssh/id_rsa.pub ] && rm /home/vagrant/.ssh/id_rsa.pub
    touch /home/vagrant/.ssh/id_rsa.pub
    echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/id_rsa.pub

    echo Provisioning private ssh key...
    [ -e /home/vagrant/.ssh/id_rsa ] && rm /home/vagrant/.ssh/id_rsa
    touch /home/vagrant/.ssh/id_rsa
    echo "#{ssh_prv_key}" >> /home/vagrant/.ssh/id_rsa

    echo Provisioning of ssh keys completed [Success].
  SHELL
end
Улад Касач
источник