デプロイキーを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 -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"

合計4 -rw ------- 1 ubuntu ubuntu 0 Mar 22 08:56 authorized_keys -rw-r--r-- 1 root root 1670 Mar 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キーが消えたように見えるのかという質問で混乱しました)。


これは、エージェント転送が機能しないWindowsでの方法です。
マーカス2013年

動作しますが、このエラーが発生します、==>デフォルト:stdin:ttyでもありません。権限も変更され、リセットする必要がありました。sudoをオフにして実行しますか?
radtek、2015年

12

SSHエージェント転送についてはどうですか?

最初にSSHキーがローカルで機能することを確認してconfig.ssh.forward_agent = trueから、Vagrantfileに追加してパススルーします。

Vagrantの詳細はこちら:http : //docs.vagrantup.com/v2/vagrantfile/ssh_settings.html


キーチェーンをコンピューターのものと呼んだら、おそらく私を面白そうに見てくれるデザイナーに迷惑な箱を配布するつもりなので、そうすることにうんざりしています。:)ありがとうございます!
キットSunde

その場合は、VeeWeeを使用して独自のボックスを作成し、それをパッケージとして配布するか、Vagrantfileを含むconfig.ssh.private_key_pathプロジェクトフォルダーにsshキーを含めるなどのひどいことを行います。ユースケースではどういうわけか配布する必要があるので、悪を選んでください!
rjocoleman 2013年

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 2015

1

Vagrant Shell Provisionerを見てください。これをVagrantfileに追加します。

ただし、何を実現しようとしているのかに応じて、提供されているsshキーを使用してVagrantにアクセスすることをお勧めします。

に追加するクイック構成ファイルを生成するには~/.ssh/config、IDファイル行を含めます$ vagrant ssh-config。その後、$ ssh you-vagrant-boxよりもでき$ vagrant sshます。


1
これは、私のボックスにSSHで接続するためのものではありません。これは、私のgitリポジトリへのアクセスを許可するためのものです。ホストからファイルを〜/ .ssh /に移動する必要があります
Kit Sunde

1
それはもっと明確です!あなたの編集では上記よろしいということです~/し、/home/ubuntu同じ場所がありますか?Vagrantのデフォルトのホームディレクトリは/home/vagrantです。
rjocoleman 2013年

Vagrantfileが完全にルビとして解釈されることを忘れないでください。そのため、次のようなことを行うことができ 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" ます。
rjocoleman 2013年

1
~/.ssh同期フォルダとを使用してファイルをにコピーできましたcpが、後でvagrantがそれを上書きするようです。
キットSunde 2013年

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.