Vagrant VM에 ssh 키를 추가하는 데 문제가 있습니다. 기본적으로 여기에있는 설정이 잘 작동합니다. VM이 생성되면을 통해 액세스 할 수 있습니다 vagrant ssh
. 사용자 “vagrant”가 존재하며 authorized_keys
파일 에이 사용자에 대한 ssh 키가 있습니다.
지금하고 싶은 것은 .NET을 통해 해당 VM에 연결 ssh
하거나 사용할 수 있도록하는 것 scp
입니다. 따라서에서 id_rsa.pub
하는 authorized_keys
것처럼 공개 키만 추가 하면됩니다 ssh-copy-id
.
설정 중에 내 공개 키를 포함해야한다고 Vagrant에게 알리는 방법이 있습니까? 그렇지 않은 경우 (Google 결과에 따르면 가능성이 있음) 방랑 설정 중에 공개 키를 쉽게 추가하는 방법이 있습니까?
답변
원하는 공개 키를 복사하면 바로 프로비저닝 단계 로 넘어갑니다 . 정확한 대답은 사용하려는 프로비저닝 (shell, Chef, Puppet 등)에 따라 다릅니다. 가장 사소한 것은 file
다음과 같은 키를 제공 하는 것입니다 .
config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "~/.ssh/me.pub"
글쎄, 실제로 당신은 authorized_keys에 추가해야합니다. 다음과 같이 셸 프로비저닝 도구를 사용합니다.
config.vm.provision "shell", inline: <<-SHELL
cat /home/vagrant/.ssh/me.pub >> /home/vagrant/.ssh/authorized_keys
SHELL
end
Puppet 과 같은 진정한 프로비저닝 도구를 사용할 수도 있습니다 . 예를 들어 Puppet을 사용하여 SSH 인증 키 관리 를 참조하십시오 .
답변
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
이 작업 예제는 방랑자 및 루트 사용자 모두에 추가 ~/.ssh/id_rsa.pub
되어 ~/.ssh/authorized_keys
기존 SSH 키를 사용할 수 있습니다.
답변
당신이하고 싶은 것을 성취하는 더 “우아한”방법이 있습니다. 공개 키를 추가하는 번거 로움을 겪지 않고 기존 개인 키를 찾아서 사용할 수 있습니다.
다음과 같이 진행하여 기존 개인 키의 경로를 확인합니다 ( IdentityFile 은 아래 참조 ).
운영
방랑 ssh 구성
결과:
$ vagrant ssh-config 호스트 magento2.vagrant150 호스트 이름 127.0.0.1 사용자 방랑자 포트 3150 UserKnownHostsFile / dev / null StrictHostKeyChecking 아니요 비밀번호 인증 번호 IdentityFile "/Users/madismanni/m2/vagrant-magento/.vagrant/machines/magento2.vagrant150/virtualbox/private_key" IdentitiesOnly 예 LogLevel 치명적
그런 다음 이와 같은 개인 키를 사용할 수 있습니다. 암호 인증을 끄는 스위치도 참고하십시오.
ssh -i /Users/madismanni/m2/vagrant-magento/.vagrant/machines/magento2.vagrant150/virtualbox/private_key -o PasswordAuthentication = no vagrant@127.0.0.1 -p 3150
답변
이 훌륭한 답변은 거부 된 제안 편집 에 user76329 에 의해 추가되었습니다.
Meow의 예제를 확장 하면 로컬 pub / private ssh 키를 복사하고, 권한을 설정하고, 인라인 스크립트를 멱등으로 만들 수 있습니다 (한 번 실행되고 테스트 조건이 실패 할 경우에만 반복되므로 프로비저닝이 필요함).
config.vm.provision "shell" do |s|
ssh_prv_key = ""
ssh_pub_key = ""
if File.file?("#{Dir.home}/.ssh/id_rsa")
ssh_prv_key = File.read("#{Dir.home}/.ssh/id_rsa")
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
else
puts "No SSH key found. You will need to remedy this before pushing to the repository."
end
s.inline = <<-SHELL
if grep -sq "#{ssh_pub_key}" /home/vagrant/.ssh/authorized_keys; then
echo "SSH keys already provisioned."
exit 0;
fi
echo "SSH key provisioning."
mkdir -p /home/vagrant/.ssh/
touch /home/vagrant/.ssh/authorized_keys
echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
echo #{ssh_pub_key} > /home/vagrant/.ssh/id_rsa.pub
chmod 644 /home/vagrant/.ssh/id_rsa.pub
echo "#{ssh_prv_key}" > /home/vagrant/.ssh/id_rsa
chmod 600 /home/vagrant/.ssh/id_rsa
chown -R vagrant:vagrant /home/vagrant
exit 0
SHELL
end
답변
더 짧고 정확한 코드는 다음과 같아야합니다.
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
config.vm.provision 'shell', inline: 'mkdir -p /root/.ssh'
config.vm.provision 'shell', inline: "echo #{ssh_pub_key} >> /root/.ssh/authorized_keys"
config.vm.provision 'shell', inline: "echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys", privileged: false
그렇지 않으면 사용자 .ssh/authorized_keys
는 루트 사용자에게 속합니다.
그래도 모든 프로비저닝 실행마다 라인이 추가되지만 Vagrant는 테스트에 사용되며 VM은 일반적으로 수명이 짧으므로 큰 문제는 아닙니다.
답변
다음과 같은 코드를 사용하게됩니다.
config.ssh.forward_agent = true
config.ssh.insert_key = false
config.ssh.private_key_path = ["~/.vagrant.d/insecure_private_key","~/.ssh/id_rsa"]
config.vm.provision :shell, privileged: false do |s|
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
s.inline = <<-SHELL
echo #{ssh_pub_key} >> /home/$USER/.ssh/authorized_keys
sudo bash -c "echo #{ssh_pub_key} >> /root/.ssh/authorized_keys"
SHELL
end
/home/vagrant/.ssh/authorized_keys
일부 방랑자 상자는 vagrant
사용자 이름을 사용하지 않으므로 경로를 하드 코드해서는 안됩니다 .
답변
일부는 가까이 왔지만 이전 게시물 중 어느 것도 나를 위해 일하지 않았습니다. 터미널에서 keygen으로 rsa 키를 만들고 사용자 지정 키로 이동해야했습니다. 즉, Vagrant의 키를 사용하여 패배했습니다.
이 게시물의 날짜를 기준으로 Mac OS Mojave를 사용하고 있습니다. 하나의 Vagrantfile에 두 개의 Vagrant 상자를 설치했습니다. 초보자가 컨텍스트를 볼 수 있도록 첫 번째 상자를 모두 표시하고 있습니다. Vagrant 파일과 같은 폴더에 .ssh 폴더를 넣습니다. 그렇지 않으면 user9091383 설정을 사용합니다.
이 솔루션에 대한 크레딧은이 코더에게 있습니다.
Vagrant.configure("2") do |config|
config.vm.define "pfbox", primary: true do |pfbox|
pfbox.vm.box = "ubuntu/xenial64"
pfbox.vm.network "forwarded_port", host: 8084, guest: 80
pfbox.vm.network "forwarded_port", host: 8080, guest: 8080
pfbox.vm.network "forwarded_port", host: 8079, guest: 8079
pfbox.vm.network "forwarded_port", host: 3000, guest: 3000
pfbox.vm.provision :shell, path: ".provision/bootstrap.sh"
pfbox.vm.synced_folder "ubuntu", "/home/vagrant"
pfbox.vm.provision "file", source: "~/.gitconfig", destination: "~/.gitconfig"
pfbox.vm.network "private_network", type: "dhcp"
pfbox.vm.network "public_network"
pfbox.ssh.insert_key = false
ssh_key_path = ".ssh/" # This may not be necessary. I may remove.
pfbox.vm.provision "shell", inline: "mkdir -p /home/vagrant/.ssh"
pfbox.ssh.private_key_path = ["~/.vagrant.d/insecure_private_key", ".ssh/id_rsa"]
pfbox.vm.provision "file", source: ".ssh/id_rsa.pub", destination: ".ssh/authorized_keys"
pfbox.vm.box_check_update = "true"
pfbox.vm.hostname = "pfbox"
# VirtualBox
config.vm.provider "virtualbox" do |vb|
# vb.gui = true
vb.name = "pfbox" # friendly name for Oracle VM VirtualBox Manager
vb.memory = 2048 # memory in megabytes 2.0 GB
vb.cpus = 1 # cpu cores, can't be more than the host actually has.
end
end
config.vm.define "dbbox" do |dbbox|
...