it-swarm.com.de

Wie kann man ssh zu vagrant machen, ohne "vagrant ssh" auszuführen

Ich möchte die Art und Weise reproduzieren, wie Vagrant sich mit einem ssh-Befehl in meinem VM innerhalb eines Shell-Skripts anmeldet, also erstelle ich einen Alias ​​für meine Vagrant-Instanz.

Wie lautet die Befehlssyntax, um mit dem regulären Befehl ssh darauf zuzugreifen?

126
Kevin Burke

Ich musste "vagrant ssh" erneut implementieren, da die -c-Option die Argumente nicht ordnungsgemäß weitergegeben hat. Dies ist im Grunde was es tut (es könnte mehr sein, aber es funktioniert gut so)

#!/bin/sh
PORT=$(vagrant ssh-config | grep Port | grep -o '[0-9]\+')
ssh -q \
    -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -i ~/.vagrant.d/insecure_private_key \
    [email protected] \
    -p $PORT \
    "[email protected]"

Als One-Liner (Dank an kgadek):

ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost

Um zu berücksichtigen, ob Sie über mehr als einen Host-Host verfügen, wird der gewünschte Host ausgewählt und leere Zeilen aus der Konfiguration entfernt (mithilfe von sed):

Host=name-of-my-Host
ssh $(vagrant ssh-config $Host | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o "$1"="$2}') localhost
101
Stefano Palazzo

Es gibt bereits viele Antworten, aber alle erscheinen zu kompliziert oder lösen Probleme, die der Fragesteller nicht hatte.

einfach:

# save the config to a file
vagrant ssh-config > vagrant-ssh

# run ssh with the file.
ssh -F vagrant-ssh default
120
Steven Soroka

Im Terminallauf

vagrant ssh

In einem anderen Terminal Fenster/Tab ausführen

ps aux | grep ssh

Dort sehen Sie den eigentlichen Befehl, der von Vagrant ausgeführt wird, etwa so:

ssh [email protected] -p 2222 -o Compression=yes -o DSAAuthentication=yes -o LogLevel=FATAL -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.vagrant.d/less_insecure_private_key -o ForwardAgent=yes
45
Leksat

Übergeben Sie einfach den gesamten vagrant ssh-config als Konfigurationsdatei mit dem Parameter -F configfile an ssh. Der Host-Alias, zu dem eine Verbindung hergestellt werden soll, wird in der ersten Zeile in vagrant ssh-config definiert. Host default bedeutet, dass Sie sich mit ssh default verbinden können.

Ich konnte keine Option zum Lesen der Konfigurationsdatei aus der Standardeingabe sehen, also mit der temporären Dateiroute. Hier ist ein Einzeiler, der anschließend auch die temporäre $TMPDIR.vagrant-ssh-config-Datei bereinigt. Es muss in demselben Verzeichnis wie Ihr Vagrantfile ausgeführt werden, vorausgesetzt, Ihre Vagrant-Box ist in Betrieb.

vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config

Hinweis: Auf meinem Mac OSX-System erweitert sich $TMPDIR auf /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/ (jetzt). Verwenden Sie eine andereVariable oder einen anderen Ordner, falls dies nicht in Ihrem System festgelegt ist.

17
Joel Purra

Ich habe das auf sehr einfache Weise gelöst: Wenn Sie die Vagrant-Box starten, wird die SSH-Adresse so angezeigt

SSH address: 127.0.0.1:2222

dann können Sie eine Verbindung zur Box herstellen, indem Sie den Vagabunden-Benutzer, den Host und den Port verwenden, den Sie erhalten

ssh [email protected] -p 2222
9

Wenn Sie stdin nicht mit ssh verwenden müssen (beispielsweise möchten Sie nur einen Befehl ausführen und sich abmelden), können Sie Folgendes verwenden:

vagrant ssh-config --Host default | ssh -F /dev/stdin default

Diese Methode wurde als Antwort auf eine ähnliche Frage in google groups vorgeschlagen.

Leider funktioniert auch die bash-Prozessersetzung nicht (siehe diese Frage unter unix.stackexchange für weitere Details).

Wenn Sie eine interaktive Shell benötigen, können Sie am besten eine temporäre Datei erstellen und diese mit ssh -F verwenden oder awk verwenden, wie in den anderen Antworten vorgeschlagen.

7
tyrion

Wenn Sie es nur so einrichten möchten, dass Sie die normale ssh-Befehlszeile sowie scp und andere verwenden können, können Sie vagrant ssh-config ausführen und die Ausgabe an Ihre standardmäßige ssh-Konfiguration anhängen. Wenn Sie die Zeile "Host-Standard" durch einen aussagekräftigeren Hostnamen ersetzen, sollten Sie sich auf den Weg machen.

vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box
5
Tedward

Viele andere Antworten setzen voraus, dass Sie Vagrant installiert haben.

Ich habe Vagrant unter Windows 10 installiert, kann aber keinen vagrant ssh, da ich PuTTY als meinen SSH-Client verwende, den der Vagrant nicht akzeptiert.

Die ssh-Programmdatei im PATH ist ein PuTTY Link-SSH-Client . Vagrant ist nur mit OpenSSH SSH-Clients kompatibel.

In Windows 10 haben wir jedoch auch Bash unter Ubuntu unter Windows. Also benutze ich das einfach mit dem folgenden Befehl:

ssh [email protected] -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal

Es ist leicht genug, Vagrant unter Win10-Ubuntu zu installieren, aber Sie möchten Virtualbox aus irgendeinem Grund installieren, was ich lieber nicht tun möchte.

N.B. Ich habe es mit der ssh default -F vagrant-ssh-config-Methode versucht, bekomme es aber einfach

Erlaubnis verweigert (Publickey, Passwort).

Ich vermute, das liegt daran, dass der IdentityFile-Pfad ein Windows-Pfad ist, während er in Bash mit /mnt/c/ beginnen sollte. Ich denke, Sie könnten die Datei einfach ausschreiben und dann ändern, wenn dies für Sie besser ist.

3
mpen

ssh [email protected]<Host> passwort: vagrant

Beispiele: 

2
Yeke

Wenn Sie möchten, dass der Befehl "Bare Minimum" eine Verbindung zu Ihrer Box herstellt, müssen Sie den verwendeten Port kennen (gedruckt, wenn Sie vagrant up ausführen, oder sichtbar, wenn Sie vagrant ssh-config ausführen) und wo Ihr privater SSH-Schlüssel ist (auch sichtbar, wenn Sie vagrant ssh-config ausführen

Dann müssen Sie nur den Schlüssel und den Port angeben:

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]

1
Nico Villanueva

Es gibt eine Möglichkeit, zu replizieren, wie sich ein entfernter Benutzer beim System anmelden kann

  1. Bearbeiten Sie die Vagrantfile für Ihre Instanz und fügen Sie sie hinzu

config.vm.network "private_network", ip: "192.168.33.10"

Dies fügt eine private IP-Adresse für den Host hinzu (machen Sie es im 192.168-Bereich so, wie Sie es wünschen, solange es noch nicht verwendet wird

  1. Starten Sie die Instanz mit vagrant reload erneut von der Befehlszeile aus
  2. Kopieren Sie die vagrant private_key -Datei in ein Linux-Äquivalent, das auf Ihrer Box ausgeführt werden sollte (z. B. Cygwin, wenn ich Windows verwende, benutze ich Windows 10) in Ihr cygwin-Home-Verzeichnis und benenne es auf dem Weg in etwas, das den Host beschreibt, der als Schlüssel verwendet wird für z.

your_virtual_Host_name.pem

  1. Sie finden den Schlüssel unter .vagrant\machines\default\virtualbox\private_key

  2. Gehen Sie in Ihr Home-Verzeichnis und führen Sie Ihre gewohnte Unix-SSH aus 

ssh -i your_virtual_hostname.pem [email protected]

wo Benutzername, möglicherweise Vagrant, wenn Sie eine Standardbox haben, sehen Sie sich die Ausgabe von Vagrant ssh-config für SSH-Standarddetails für die Box an.

Das ist es

1
Jimbo

Sie können der lokalen SSH-Konfiguration die Vagrant-Host-Konfiguration hinzufügen.

  1. Vagabund ssh-config >> ~/.ssh/config

  2. ssh vagrant @ {Host}

ex. cat ~/.ssh/config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
  • ssh vagrant @ kmaster
1

Vagrant speichert den privaten Schlüssel in ~/.vagrant.d/insecure_private_key und verwendet ihn, um über ssh eine Verbindung zu jedem Rechner herzustellen. Dabei wird davon ausgegangen, dass er für den Anschluss an Port 2200 konfiguriert ist (Standardeinstellung).

ssh [email protected] -p 2200 -i ~/.vagrant.d/insecure_private_key

Hinweis: Stellen Sie sicher, dass der private Schlüssel dem Benutzer gehört, der Vagrant ausführt.

Wenn Sie jedoch eine Multi-Machine-Umgebung haben möchten, können Sie dies mit config.vm.define tun.

Hier ist ein Beispiel, das eine Umgebung mit zwei Maschinen veranschaulicht, eine heißt web und die andere ist databases:

config.vm.define 'web', primary: true do |web|
        web.vm.box = 'CentOS64'
        web.vm.hostname = 'vic-develop'
        web.vm.network 'private_network', ip: '192.168.50.10', virtualbox__intnet: true
        web.vm.synced_folder '../code', '/var/www/project', :mount_options => ["dmode=777,fmode=777"]

        web.vm.provision 'ansible' do |ansible|
            ansible.playbook = 'development-web.yml'
            ansible.Sudo = true
        end
end

config.vm.define 'databases' do |db|
    db.vm.box = 'CentOS64'

    db.vm.network 'private_network', ip: '192.168.50.20', virtualbox__intnet: true
    db.vm.network :forwarded_port, guest: 3306, Host: 8206

    db.vm.provision 'ansible' do |ansible|
        ansible.playbook = 'development-db.yml'
        ansible.Sudo = true
    end
end

Dann stehen Ihnen alle Vagrant-Befehle für jede Maschine zur Verfügung, d. H. vagrant ssh web und vagrant provision databases.

1
Mulkave

Sie können ssh config für Ihren vagrant Host zu ssh config hinzufügen.

  1. Holen Sie sich die ssh config für den vagrant machine in den vagrant Ordner: vagrant ssh-config

  2. Öffnen Sie {UserDir}/.ssh/config und hängen Sie das Ergebnis aus dem vorherigen Befehl an. Hinweis : Die erste Zeile Host default bezeichnet den Alias, den Sie später für den Befehl ssh verwenden. Nennen Sie es als Ihre Landmaschine oder Ihr Verzeichnis. Wenn Sie nur ein Vagrant-Verzeichnis haben, können Sie es Host vagrant nennen.

  3. Ssh an vagrant: ssh vagrant. Der Nachname ist ein Alias ​​aus dem vorherigen Schritt.

0
FreeLightman

Mein Env. ist Win7 + Centos. Die Antwort mit den meisten Übereinstimmungen funktioniert für mich nicht. Nach dem Versuch, ssh -p [port] [usrname]@127.0.01 auszuprobieren, verwende ich einfach XShell, um eine neue Sitzung mit dem vagrant-Port und dem Benutzernamen hinzuzufügen. 

Es klappt.

Vielleicht ist Xshell ein Kandidat. 

0
onebraveman

Sie können jedes der ssh-config-Argumente verwenden und als -o Key=value an die Befehlszeile von ssh übergeben. Für ein einfaches Ein-Host-Vagrant-Setup (für ein Multihost-Setup müssen Sie möglicherweise etwas mehr mit grep oder Perl arbeiten), können Sie Folgendes tun (oder Perl durch sed ersetzen, wenn Sie möchten):

ssh `vagrant ssh-config | tail -8 | Perl -pe 's/^\s+/[email protected]/; s/\s/\=/;s/@/ /;s/\n/ /'` [email protected]
0
Darin London