배포 키를 방랑자로 어떻게 옮길 수 있습니까?


9

ssh 키를 방랑자로 옮기고에 넣고 싶습니다 ~/.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 개의 방랑자 1670 년 3 월 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 우분투 우분투 0 3 월 22 일 08:56 certified_keys -rw-r--r-- 1 루트 루트 1670 3 월 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의 방법입니다.
markus

작동하지만이 오류가 발생합니다 ==> 기본값 : stdin : tty도 권한 변경이 아니며 재설정해야하며 sudo off fix로 실행됩니까?
radtek

12

무엇에 대한 SSH 에이전트 포워딩?

SSH 키가 먼저 로컬에서 작동하는지 확인한 다음 통과하도록 추가 config.ssh.forward_agent = true하십시오 Vagrantfile.

여기에 방랑자 세부 사항 : http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html


키 체인을 컴퓨터로 언급하기 시작했을 때 아마도 재미있을 것 같은 디자이너들에게 방랑 상자를 배포 할 계획이기 때문에 그렇게하는 것이 지겨워 요. :) 그래도 고마워!
Kit Sunde

이 경우 VeeWee로 내 상자를 만들고 패키지로 배포 config.ssh.private_key_path하거나 Vagrantfile이있는 프로젝트 폴더에 ssh 키가있는 것과 같은 끔찍한 일을합니다. 그것은 어떻게 든 유스 케이스에 배포되어야하므로 악을 선택하십시오!
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_keysecho "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. 공개 SSH 키에 특수 문자 (예 :)가 포함 된 경우에도 작동합니다 (.
tjanez

1

상기 살펴보세요 방랑 쉘 제공자를 , 당신은 당신의 Vagrantfile이 추가 것입니다.

그러나 달성하려는 목표에 따라 제공된 ssh 키를 사용하여 Vagrant에 액세스하는 것이 좋습니다.

~/.ssh/config신원 파일 줄 실행을 포함하여에 추가 할 빠른 구성 파일을 생성하려면 $ vagrant ssh-config. 당신은 $ ssh you-vagrant-box오히려 오히려 수 $ vagrant ssh있습니다.


1
아 이것은 내 상자에 SSH를 넣는 것이 아니라 내 자식 저장소에 방대한 액세스 권한을 부여하는 것입니다. 따라서 호스트에서 ~ / .ssh /로 파일을 이동해야합니다.
Kit Sunde

1
더 분명하다! 당신의 편집에서 위의 당신은 있는지 있습니다 ~//home/ubuntu같은 위치는? Vagrant의 기본 홈 디렉토리는 /home/vagrant입니다.
rjocoleman

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" . ssh 키를 읽는 권한 문제가 발생할 수 있습니다.
rjocoleman

1
~/.ssh동기화 된 폴더 를 사용하여 파일을 복사 할 수 cp있었지만 나중에 방랑자가 파일을 덮어 쓰는 것처럼 보입니다.
Kit Sunde

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.