/ / Jak dodać własny klucz publiczny do Vagrant VM? - ssh, włóczęga, klucz publiczny

Jak dodać własny klucz publiczny do Vagrant VM? - ssh, włóczęga, klucz publiczny

Mam problem z dodaniem klucza ssh do maszyny wirtualnej Vagrant. Zasadniczo konfiguracja, którą tu mam, działa dobrze. Po utworzeniu maszyn wirtualnych mogę uzyskać do nich dostęp za pośrednictwem vagrant ssh, użytkownik „włóczęga” istnieje i istnieje klucz ssh dla tego użytkownika w authorized_keys plik.

Chciałbym teraz: móc połączyć się z tymi maszynami wirtualnymi za pośrednictwem ssh albo użyj scp. Potrzebowałbym więc tylko dodać mój klucz publiczny id_rsa.pub do authorized_keys - tak jakbym to zrobił ssh-copy-id.

Czy jest sposób, aby powiedzieć Vagrantowi podczas instalacjiże mój klucz publiczny powinien zostać dołączony? Jeśli nie (co jest prawdopodobne, zgodnie z moimi wynikami Google), czy istnieje sposób, aby łatwo dołączyć mój klucz publiczny podczas błędnej konfiguracji?

Odpowiedzi:

30 dla odpowiedzi nr 1

Skopiowanie żądanego klucza publicznego spadłoby prosto do zaopatrzenie faza. Dokładna odpowiedź zależy od tego, jakiego zaopatrzenia chcesz użyć (muszla, szef kuchni, marionetka itp.). Najbardziej trywialnym byłoby file dostawca klucza, coś wzdłuż tego:

config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "~/.ssh/me.pub"

Cóż, tak naprawdę musisz dołączyć do uprawnione klucze, użyć prawdziwego dostawcy, takiego jak Marionetka. Na przykład patrz Zarządzanie autoryzowanymi kluczami SSH za pomocą Puppet.


52 dla odpowiedzi nr 2

Możesz użyć podstawowego modułu pliku Ruby, takiego jak:

  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

Ten działający przykład dołącza się ~/.ssh/id_rsa.pub do ~/.ssh/authorized_keys zarówno włóczęgi, jak i użytkownika root, co pozwoli ci użyć istniejącego klucza SSH.


26 dla odpowiedzi nr 3

Istnieje bardziej „elegancki” sposób na osiągnięcie tego, co chcesz zrobić. Możesz znaleźć istniejący klucz prywatny i użyć go zamiast męczyć się z dodawaniem klucza publicznego.

Postępuj w ten sposób, aby zobaczyć ścieżkę do istniejącego klucza prywatnego (poszukaj poniżej IdentityFile):

biegać

 włóczęga ssh-config 

wynik:

$ vagrant ssh-config Host magento2.vagrant150 Nazwa hosta 127.0.0.1 Użytkownik włóczęga Port 3150 UserKnownHostsFile / dev / null StrictHostKeyChecking no Hasło Numer uwierzytelnienia IdentityFile ”/Users/madismanni/m2/vagrant-magento/.vagrant/machines/magento2.vagrant150/virtualbox/private_key” Tożsamości Tylko tak LogLevel FATAL

Następnie możesz użyć takiego klucza prywatnego, zwróć też uwagę na przełącznik wyłączania uwierzytelniania hasła

ssh -i /Users/madismanni/m2/vagrant-magento/.vagrant/machines/magento2.vagrant150/virtualbox/private_key -o HasłoAuthentication = no vagrant@127.0.0.1 -p 3150

8 dla odpowiedzi № 4

W końcu używam kodu takiego jak:

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

Zauważ, że nie powinniśmy ustalać twardej ścieżki do kodu /home/vagrant/.ssh/authorized_keys ponieważ niektóre włóczęgi nie używają vagrant Nazwa Użytkownika.


7 dla odpowiedzi № 5

Krótszy i bardziej poprawny kod powinien być:

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

W przeciwnym razie użytkownik .ssh/authorized_keys będzie należeć do użytkownika root.

Nadal doda wiersz przy każdym uruchomieniu rezerwy, ale Vagrant jest używany do testowania, a maszyna wirtualna ma zwykle krótką żywotność, więc nie jest to duży problem.


4 dla odpowiedzi № 6

Ta doskonała odpowiedź została dodana przez użytkownik76329 w odrzucony Sugerowana edycja

Rozszerzanie Przykład Meow, możemy skopiować lokalne klucze pub / private ssh, ustawić uprawnienia i uczynić skrypt wbudowany idempotentnym (uruchamia się raz i powtórzy się tylko, jeśli warunek testowy się nie powiedzie, co wymaga obsługi administracyjnej):

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

0 dla odpowiedzi № 7

To doskonały wątek, który pomógł mi rozwiązać podobną sytuację, jak opisuje oryginalny plakat.

Podczas gdy ostatecznie wykorzystałem ustawienia / logikę przedstawione w smartwjw's odpowiedź, wpadłem w autostop, odkąd używam VAGRANT_HOME zmienna środowiskowa, aby zapisać rdzeń vagrant.d katalog na zewnętrznym dysku twardym w jednym z moich systemów programistycznych.

Oto więc dostosowany kod, którego używam w pliku Vagrantfile, aby dostosować go do pliku VAGRANT_HOME ustawiana zmienna środowiskowa; „magia” dzieje się w tej linii vagrant_home_path = ENV["VAGRANT_HOME"] ||= "~/.vagrant.d":

config.ssh.insert_key = false
config.ssh.forward_agent = true
vagrant_home_path = ENV["VAGRANT_HOME"] ||= "~/.vagrant.d"
config.ssh.private_key_path = ["#{vagrant_home_path}/insecure_private_key", "~/.ssh/id_rsa"]
config.vm.provision :shell, privileged: false do |shell_action|
ssh_public_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
shell_action.inline = <<-SHELL
echo #{ssh_public_key} >> /home/$USER/.ssh/authorized_keys
SHELL
end

0 dla odpowiedzi № 8

W przypadku dostawców wbudowanych powłok - klucz publiczny zawiera spacje, komentarze itp. Upewnij się, że umieściłeś (zmienione) cudzysłowy wokół zmiennej, która rozwija się do klucza publicznego:

config.vm.provision "shell", inline: "echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keys", privileged: false

-1 dla odpowiedzi № 9

Wygeneruj parę kluczy rsa do błędnego uwierzytelnienia ssh-keygen -f ~/.ssh/vagrant

Możesz także dodać błędne pliki tożsamości do swojego ~/.ssh/config

IdentityFile ~/.ssh/vagrant
IdentityFile ~/.vagrant.d/insecure_private_key

Z jakiegoś powodu nie możemy po prostu określić klucza, który mychcę wstawić, więc weźmiemy kilka dodatkowych kroków, aby sami wygenerować klucz. W ten sposób uzyskujemy bezpieczeństwo i wiedza o tym, jakiego dokładnie klucza potrzebujemy (+ wszystkie włóczęgi otrzymają ten sam klucz)

Nie można ssh do włóczęgów wirtualnych przy użyciu niepewnego klucza prywatnego (włóczęga 1.7.2) Jak dodać własny klucz publiczny do Vagrant VM?

config.ssh.insert_key = false
config.ssh.private_key_path = ["~/.ssh/vagrant", "~/.vagrant.d/insecure_private_key"]
config.vm.provision "file", source: "~/.ssh/vagrant.pub", destination: "/home/vagrant/.ssh/vagrant.pub"
config.vm.provision "shell", inline: <<-SHELL
cat /home/vagrant/.ssh/vagrant.pub >> /home/vagrant/.ssh/authorized_keys
mkdir -p /root/.ssh
cat /home/vagrant/.ssh/authorized_keys >> /root/.ssh/authorized_keys

MUSZLA