Làm thế nào tôi có thể di chuyển khóa triển khai của mình vào vagrant?


9

Tôi muốn chuyển một khóa ssh thành vagrant và đặt chúng vào ~/.ssh, cách dễ nhất để làm điều đó là gì? Tôi có các mục sau trong tệp Vagrant của mình:

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

tổng cộng 4 -rw-r - r-- 1 vagrant vagrant 1670 Mar 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"

tổng cộng 4 -rw ------- 1 ubfox ubfox 0 Mar 22 08:56 ủy quyền_keys -rw-r - r-- 1 root 1670 Mar 26 08:59 id_rsa

nhưng sau đó khi vagrant ssh -c "ls -l ~/.ssh"tôi nhận được:

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

Vì vậy, vagrant đang ghi đè lên .sshthư mục của tôi .

Câu trả lời:


13

Tôi đặt tệp SSH của mình vào conf.d/.ssh/id_rsa.medipopvà sau đó đã làm:

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"

Nó hoạt động tuyệt vời khi tôi nhận ra người dùng mơ hồ vagrantkhông phải ubuntu(đó là lý do tại sao tôi bối rối trong câu hỏi của mình là tại sao khóa ssh của tôi dường như biến mất).


Đây là cách trên windows, nơi chuyển tiếp đại lý không hoạt động.
markus

hoạt động nhưng gặp lỗi này, ==> mặc định: stdin: không phải là một tty cũng thay đổi quyền và phải được đặt lại, sẽ chạy với sửa lỗi sudo?
radtek

12

Điều gì về Chuyển tiếp đại lý SSH?

Hãy chắc chắn rằng khóa SSH của bạn hoạt động cục bộ trước sau đó thêm config.ssh.forward_agent = truevào Vagrantfileđể vượt qua.

Chi tiết mơ hồ tại đây: http://docs.vagrantup.com/v2/vagrantfile/ssh_sinstall.html


Tôi mệt mỏi vì phải làm điều đó vì tôi dự định phân phối hộp mơ hồ cho các nhà thiết kế của chúng tôi, những người có lẽ sẽ nhìn tôi buồn cười nếu tôi bắt đầu coi móc khóa là thứ máy tính. :) Cảm ơn mặc dù!
Kit Sunde

Trong trường hợp đó, tôi sẽ xây dựng hộp riêng của mình với VeeWee và phân phối nó dưới dạng gói bao gồm config.ssh.private_key_pathhoặc làm một cái gì đó khủng khiếp như có khóa ssh trong thư mục dự án với Vagrantfile. Nó phải được phân phối bằng cách nào đó trong trường hợp sử dụng, vì vậy hãy chọn cái ác của bạn!
rjocoleman

1
Đây là khá nhiều câu hỏi tương tự: superuser.com/a/570775/210384
rjocoleman

5

Bạn có thể sử dụng mô-đun Tệp lõi của Ruby, như vậy:

  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

Tôi thực sự ngạc nhiên khi Vagrant không cung cấp điều này theo mặc định!


Tôi cũng khuyên bạn nên thêm dấu ngoặc kép xung quanh các echođối số: echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keysecho "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Điều này cũng sẽ hoạt động nếu khóa SSH công khai chứa các ký tự đặc biệt (ví dụ ().
tjanez

1

Hãy xem Nhà cung cấp Shell Vagrant , bạn sẽ thêm nó vào Vagrantfile của bạn.

Tuy nhiên, tùy thuộc vào những gì bạn đang cố gắng đạt được, có lẽ tốt hơn là sử dụng khóa ssh được cung cấp để truy cập Vagrant.

Để tạo tệp cấu hình nhanh được thêm vào của bạn ~/.ssh/config, bao gồm cả dòng tệp nhận dạng chạy $ vagrant ssh-config. Bạn có thể sau đó $ ssh you-vagrant-boxhơn là $ vagrant ssh.


1
À, đây không phải là để SSH vào hộp của tôi, đây là để cung cấp quyền truy cập mơ hồ vào kho git của tôi. Vì vậy, tôi cần chuyển một tập tin từ máy chủ của mình vào ~ / .ssh /
Kit Sunde 26/03/13

1
Điều đó rõ ràng hơn! Trong chỉnh sửa của bạn ở trên, bạn có chắc chắn rằng ~//home/ubuntulà cùng một vị trí? Homedir mặc định của Vagrant là /home/vagrant.
rjocoleman

Đừng quên rằng Vagrantfile của bạn được giải thích hoàn toàn bằng ruby, vì vậy bạn có thể làm điều gì đó như: 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" Bạn có thể gặp phải các vấn đề về quyền khi đọc khóa ssh.
rjocoleman

1
Tôi đã quản lý để sao chép tập tin vào ~/.sshmột thư mục được đồng bộ hóa cp, nhưng có vẻ như nó sẽ ghi đè lên nó sau đó.
Kit Sunde

0

Để di chuyển cả khóa riêng và khóa chung, các thao tác sau sẽ hoạt động:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.