Ich habe ein Problem beim Hinzufügen eines SSH-Schlüssels zu einer Vagrant-VM. Grundsätzlich funktioniert das Setup, das ich hier habe, gut. Sobald die VMs erstellt sind, kann ich über auf sie zugreifen vagrant ssh
, der Benutzer "vagrant" existiert und es gibt einen SSH-Schlüssel für diesen Benutzer in der authorized_keys
Datei.
Was ich jetzt tun möchte, ist: eine Verbindung zu diesen VMs herstellen ssh
oder diese verwenden zu können scp
. Also brauchte ich nur meine öffentlichen Schlüssel hinzufügen , id_rsa.pub
um die authorized_keys
- genau wie ich mit machen würde ssh-copy-id
.
Gibt es eine Möglichkeit, Vagrant während des Setups mitzuteilen, dass mein öffentlicher Schlüssel enthalten sein soll? Wenn nicht (was laut meinen Google-Ergebnissen wahrscheinlich ist), gibt es eine Möglichkeit, meinen öffentlichen Schlüssel während des Vagrant-Setups einfach anzuhängen?
quelle
virtualhost.vm.provision "shell", inline: "cat ~vagrant/.ssh/me.pub >> ~vagrant/.ssh/authorized_keys"
i
s) sind Unicode-Zeichen versteckt , die Ihren Nachmittag ruinieren können - hier ist eine feste Kopie / pastable Versionvirtualhost.vm.provision "shell", inline: "cat ~vagrant/.ssh/me.pub >> ~vagrant/.ssh/authorized_keys"
~/.ssh/id_rsa.pub
. Holen Sie sichssh-add -L
stattdessen die Schlüssel von .Sie können Rubys Kernmodul "Datei" wie folgt verwenden:
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
Dieses Arbeitsbeispiel wird sowohl an den Benutzer des Vagabunden als auch an den Root-Benutzer angehängt
~/.ssh/id_rsa.pub
, sodass~/.ssh/authorized_keys
Sie Ihren vorhandenen SSH-Schlüssel verwenden können.quelle
Es gibt eine "elegantere" Möglichkeit, das zu erreichen, was Sie tun möchten. Sie können den vorhandenen privaten Schlüssel finden und verwenden, anstatt sich die Mühe zu machen, Ihren öffentlichen Schlüssel hinzuzufügen.
Gehen Sie folgendermaßen vor, um den Pfad zum vorhandenen privaten Schlüssel anzuzeigen (siehe unten für IdentityFile ):
Lauf
Ergebnis:
Dann können Sie den privaten Schlüssel wie folgt verwenden. Beachten Sie auch den Schalter zum Ausschalten der Kennwortauthentifizierung
quelle
Diese hervorragende Antwort wurde von user76329 in einem abgelehnten Änderungsvorschlag hinzugefügt
Wenn wir das Beispiel von Meow erweitern , können wir die lokalen Pub / Private SSH-Schlüssel kopieren, Berechtigungen festlegen und das Inline-Skript idempotent machen (wird einmal ausgeführt und nur wiederholt, wenn die Testbedingung fehlschlägt und daher eine Bereitstellung erforderlich ist):
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
quelle
Ein kürzerer und korrekterer Code sollte sein:
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
Andernfalls gehört der Benutzer dem
.ssh/authorized_keys
Root-Benutzer.Es wird immer noch eine Zeile bei jedem Bereitstellungslauf hinzugefügt, aber Vagrant wird zum Testen verwendet und eine VM hat normalerweise eine kurze Lebensdauer, also kein großes Problem.
quelle
config.vm.provision 'shell', inline: "mkdir -p /root/.ssh"
nach der ersten Zeile hinzufügen , da Ordner nicht existiertessh-copy-id
, daher wird es immer für mich erstellt, aber es ist korrekter, es für andere zu erstellen. Ich werde bearbeiten, danke.Am Ende verwende ich Code wie:
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
Beachten Sie, dass wir den Pfad nicht fest codieren sollten,
/home/vagrant/.ssh/authorized_keys
da einige vagabundierende Felder denvagrant
Benutzernamen nicht verwenden .quelle
vagrant.d
Verzeichnis gespeichert wird, also habe ich Ihre Konfiguration angepasst, um solche Fälle zu behandeln. Details hier .Keiner der älteren Beiträge hat für mich funktioniert, obwohl einige nahe kamen. Ich musste rsa-Schlüssel mit keygen im Terminal erstellen und mit benutzerdefinierten Schlüsseln arbeiten. Mit anderen Worten, besiegt von Vagrants Schlüsseln.
Ich bin unter Mac OS Mojave zum Datum dieses Beitrags. Ich habe zwei Vagrant-Boxen in einer Vagrant-Datei eingerichtet. Ich zeige die gesamte erste Box, damit Neulinge den Kontext sehen können. Ich habe den .ssh-Ordner im selben Ordner wie die Vagrant-Datei abgelegt, andernfalls verwende ich das user9091383-Setup.
Der Kredit für diese Lösung geht an diesen Codierer.
quelle
Dies ist ein ausgezeichneter Thread, der mir geholfen hat, eine ähnliche Situation zu lösen, wie sie im Originalposter beschrieben wird.
Während ich letztendlich die Einstellungen / Logik verwendet habe, die in der Antwort von smartwjw dargestellt sind , bin ich auf ein Problem gestoßen , da ich die
VAGRANT_HOME
Umgebungsvariable verwende, um dasvagrant.d
Kernverzeichnismaterial auf einer externen Festplatte auf einem meiner Entwicklungssysteme zu speichern .Hier ist also der angepasste Code, den ich in meiner Vagrant-Datei verwende, um eine
VAGRANT_HOME
Umgebungsvariable aufzunehmen, die gesetzt wird. Die "Magie" geschieht in dieser Zeilevagrant_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
quelle
Für die Inline-Shell-Provisioner enthält ein öffentlicher Schlüssel häufig Leerzeichen, Kommentare usw. Stellen Sie daher sicher, dass die Variable, die zum öffentlichen Schlüssel erweitert wird, in Anführungszeichen gesetzt wird:
quelle
Ein ziemlich vollständiges Beispiel, hoffe, dies hilft jemandem, der als nächstes besucht. Alle konkreten Werte wurden in externe Konfigurationsdateien verschoben. Die IP-Zuweisung dient nur zum Ausprobieren.
quelle
Die Antwort von Madis Maenni kommt der besten Lösung am nächsten:
mach einfach:
dann kannst du einfach über den hostnamen ssh.
Um eine Liste der in ~ / .ssh / config konfigurierten Hostnamen zu erhalten
Mein Beispiel:
quelle
Generieren Sie ein RSA-Schlüsselpaar für die vagabundierende Authentifizierung
ssh-keygen -f ~/.ssh/vagrant
Möglicherweise möchten Sie auch die vagabundierenden Identitätsdateien zu Ihrer hinzufügen
~/.ssh/config
Aus irgendeinem Grund können wir nicht einfach den Schlüssel angeben, den wir einfügen möchten, sodass wir einige zusätzliche Schritte unternehmen, um selbst einen Schlüssel zu generieren. Auf diese Weise erhalten wir Sicherheit und wissen genau, welchen Schlüssel wir benötigen (+ alle Vagabundboxen erhalten denselben Schlüssel).
Kann nicht mit dem unsicheren privaten Schlüssel (vagrant 1.7.2) zu vagabundierenden VMs ssh. Wie füge ich Vagrant VM meinen eigenen öffentlichen Schlüssel hinzu?
SCHALE
quelle