Bagaimana saya bisa memindahkan kunci penyebaran saya ke gelandangan?

9

Saya ingin memindahkan kunci ssh ke gelandangan dan memasukkannya ke dalam ~/.ssh, apa cara termudah untuk melakukan itu? Saya memiliki yang berikut di file Vagrant saya:

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

total 4 -rw-r - r-- 1 gelandangan gelandangan 1670 26 Maret 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"

total 4 -rw ------- 1 ubuntu ubuntu 0 Mar 22 08:56 official_keys -rw-r - r-- 1 root root 1670 26 Maret 26 08:59 id_rsa

tapi kemudian ketika saya melakukannya vagrant ssh -c "ls -l ~/.ssh"saya mendapatkan:

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

Jadi gelandangan menimpa .sshdirektori saya .

Kit Sunde
sumber

Jawaban:

13

Saya memasukkan file SSH saya conf.d/.ssh/id_rsa.medipopdan kemudian melakukan:

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"

Yang bekerja dengan sangat baik ketika saya menyadari pengguna gelandangan vagranttidak ubuntu(itulah sebabnya saya bingung dalam pertanyaan saya mengapa kunci ssh saya sepertinya hilang).

Kit Sunde
sumber
Ini adalah cara di windows, di mana penerusan agen tidak bekerja.
markus
berfungsi tetapi mendapatkan kesalahan ini, ==> default: stdin: bukan tty juga izin berubah dan harus diatur ulang, akan berjalan dengan sudo off fix?
radtek
12

Bagaimana dengan Penerusan Agen SSH?

Pastikan kunci SSH Anda berfungsi secara lokal terlebih dahulu kemudian tambahkan config.ssh.forward_agent = trueke Anda Vagrantfileuntuk melewatinya.

Detail vagran di sini: http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html

rjocoleman
sumber
Saya lelah melakukan itu karena saya berencana mendistribusikan kotak gelandangan kepada desainer kami yang mungkin akan melihat saya lucu jika saya mulai menyebut gantungan kunci sebagai hal-hal komputer. :) Terimakasih Meskipun!
Kit Sunde
Dalam hal ini saya akan membangun kotak saya sendiri dengan VeeWee dan mendistribusikannya sebagai paket termasuk config.ssh.private_key_pathatau melakukan sesuatu yang mengerikan seperti memiliki kunci ssh di folder proyek dengan Vagrantfile. Itu harus didistribusikan entah bagaimana dalam use case, jadi pilih iblismu!
rjocoleman
1
Ini adalah pertanyaan yang hampir sama: superuser.com/a/570775/210384
rjocoleman
5

Anda dapat menggunakan modul File inti Ruby, seperti:

  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

Saya benar-benar terkejut bahwa Vagrant tidak menyediakan ini secara default!

meong
sumber
Saya akan merekomendasikan untuk juga menambahkan kutipan di sekitar echoargumen: echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keysdan echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Ini juga akan berfungsi jika kunci SSH publik berisi karakter khusus (misalnya ().
tjanez
1

Lihatlah Penyedia Kerang Vagrant , Anda akan menambahkan ini ke Vagrantfile Anda.

Namun, tergantung pada apa yang ingin Anda capai, mungkin lebih baik menggunakan kunci ssh yang disediakan untuk mengakses Vagrant.

Untuk membuat file konfigurasi cepat yang akan ditambahkan ke Anda ~/.ssh/config, termasuk menjalankan baris file identitas $ vagrant ssh-config. Anda kemudian bisa $ ssh you-vagrant-boxdaripada $ vagrant ssh.

rjocoleman
sumber
1
Ah ini bukan untuk SSH'ing ke dalam kotak saya, ini untuk memberikan akses gelandangan ke repositori git saya. Jadi saya harus memindahkan file dari host saya ke ~ / .ssh /
Kit Sunde
1
Itu lebih jelas! Dalam hasil edit Anda di atas, apakah Anda yakin itu ~/dan /home/ubuntulokasinya sama? Homedir default Vagrant adalah /home/vagrant.
rjocoleman
Jangan lupa bahwa Vagrantfile Anda sepenuhnya ditafsirkan ruby, sehingga Anda bisa melakukan sesuatu seperti: 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" Anda mungkin mengalami masalah izin membaca kunci ssh.
rjocoleman
1
Saya telah berhasil menyalin file ke ~/.sshmenggunakan folder yang disinkronkan dan cp, tetapi sepertinya gelandangan menimpanya setelah itu.
Kit Sunde
0

Untuk memindahkan kunci privat dan publik, yang berikut ini akan berfungsi:

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
Ulad Kasach
sumber