2014-03-25 11 views
32

Anstatt auf meiner virtuellen Vagrant-Maschine mit einem "vagranten" Benutzernamen und Passwort anzusprechen, würde ich gerne kevin/kevin verwenden.SSH auf Vagrant Box mit anderem Benutzernamen

Ich veränderte mein Vagrantfile enthalten:

config.ssh.username = "kevin"

Dann lief ich vagrant reload.

Die folgende Ausgabe auftauchten:

[default] Waiting for machine to boot. This may take a few minutes... 
Timed out while waiting for the machine to boot. This means that 
Vagrant was unable to communicate with the guest machine within 
the configured ("config.vm.boot_timeout" value) time period. This can 
mean a number of things. 

aber ich konnte immer noch auf meine vagrant Box ssh vagrant/vagrant verwenden, doch II konnte nicht mit einem Benutzernamen und Passwort von kevin/kevin auf die Box ssh oder Kevin/Landstreicher.

Bitte beachte, dass ich auch versucht, diese Antwort (https://stackoverflow.com/a/9924122/409976), aber ich konnte nur ssh auf die Box mit Benutzername vagrant, nicht kevin (auch wenn es in den Vagrantfile angegeben ist).

Wie kann ich meine Vagrantfile so konfigurieren, dass ich SSH mit Benutzernamen kevin kann?

+1

Wenn Sie sich selbst mit 'vagrant', aber nicht mit Kevin ssh können, dann klingt es so, als müssten Sie den' kevin' Benutzer im Gastbild einrichten. Die 'Vagrantfile'-Konfiguration legt nur den Benutzer fest, der verwendet wird, es richtet keine Benutzer auf dem Gast ein. – zanerock

Antwort

46

Sie können ssh zu der Box mit vagrant, aber nicht kevin, das ist zu erwarten. Die meisten Vagrant-Basisboxen haben nur 2 Benutzer mit SSH-Zugang, root und vagrant. Beide verwenden vagrant als Kennwort, außerdem ist vagrant für die Authentifizierung mit öffentlichen Schlüsseln konfiguriert, wobei das unsichere Schlüsselpaar (siehe Vagrant insecure by default?) verwendet wird, das im Vagrant-Projekt auf GitHub bereitgestellt wird.

zu können als kevin anmelden, werden Sie in die Box ssh haben und dem Benutzer (useradd -m -s /bin/bash -U kevin) zuerst erstellen, konfigurieren Public-Key-Authentifizierung (viele Möglichkeiten, zB ssh-copy-id ich es Ihnen überlassen werden.)

Sie sollten in der Lage sein, ssh in das Feld nach dem Erstellen des Benutzers mit vagrant ssh, wenn Sie config.ssh.username in Vagrantfile richtig festgelegt.

Natürlich können Sie manuell in die Box ssh (nehmen NAT ist in Verwendung)

ssh -p 2222 [email protected]

oder (unter Linux)

ssh -p 2222 -i /opt/vagrant/embedded/gems/gems/vagrant-1.5.1/keys/vagrant.pub [email protected]

+1

Beachten Sie, dass ich einfach einen Benutzer ('useradd ...') erstellen, meine VM zerstören und hochfahren konnte, und dann erfolgreich SSH mit Kitt mit Kevin/Kevin Log-in. Aber, ich bin ein wenig verwirrt, da, wie Sie in "Vagrant unsicher standardmäßig?" Erwähnt haben, nicht "vagrant" und "root" nur SSH ohne Schlüssel explizit konfiguriert werden könnte? –

+1

Sie können ssh in die Box mit Benutzer vagrant, werden root und kopieren Sie dann die Datei /home/vagrant/.ssh/authorized_keys nach/home/kevin /. Ssh/authorized_keys. Stellen Sie sicher, dass der Besitz und die Berechtigung von /home/kevin/.ssh/authorized_keys OK sind (600 und Besitzer Kevin: Gruppe von Kevin). – Saule

+0

@Saules Kommentar ist die beste Antwort. Der Thread ist alt, aber die Suche nach diesem Thema brachte mich hierher. – rickb

0

Ein bisschen wie ein Hack, Sie können jedoch die Zeile sudo su - kevin zu Ihrer .bash_profile-Datei hinzufügen und kevin ohne Kennwort zur Datei sudoers hinzufügen.

Dadurch wird der aktuelle Benutzer in kevin geändert, wenn er sich als vagabundierender Benutzer über die Befehlszeile anmeldet.

Der Vorteil dieses Ansatzes ist, dass NAT nicht aktiviert werden muss.

+0

das ist so ein hack! aber es ist einfach und ich mag es. –

1

Erstellen Sie eine Vagrant-Datei wie die folgende. Beachten Sie, dass wir den vagabundierenden Benutzer zum sofortigen Wechsel zum von uns erstellten Benutzer "kevin" starten.

bootstrap = <<SCRIPT 
    useradd -m kevin --groups sudo 
    su -c "printf 'cd /home/kevin\nsudo su kevin' >> .bash_profile" -s /bin/sh vagrant 
SCRIPT 

Vagrant.configure("2") do |config| 
    config.vm.box = "bento/ubuntu-16.04" 
    config.vm.host_name = "kevin" 
    config.vm.provision "shell", inline: "#{bootstrap}", privileged: true 
end 

ssh jetzt in die vm:

$ vagrant ssh 
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-83-generic x86_64) 

* Documentation: https://help.ubuntu.com 
* Management:  https://landscape.canonical.com 
* Support:  https://ubuntu.com/advantage 

0 packages can be updated. 
0 updates are security updates. 


To run a command as administrator (user "root"), use "sudo <command>". 
See "man sudo_root" for details. 

[email protected]:/home/vagrant$ 
3

Eine andere Lösung, nach über Ihr Provisioning-Skript Benutzer Vagrant hinzufügen:

## add kevin 
useradd -m -s /bin/bash -U kevin -u 666 --groups wheel 
cp -pr /home/vagrant/.ssh /home/kevin/ 
chown -R kevin:kevin /home/kevin 
echo "%kevin ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/kevin 

fügen Sie diese zu Ihrer Vagrant-Datei:

VAGRANT_COMMAND = ARGV[0] 
if VAGRANT_COMMAND == "ssh" 
    config.ssh.username = 'kevin' 
end 

Jetzt wird Vagrant uns e Standard vagrant Benutzer zur Bereitstellung Ihrer VM, aber sobald es abgelaufen ist, können Sie einfach vagrant ssh verwenden, um sich als kevin über Standard Vagrant ssh-key anmelden.

Auf diese Weise können Sie Ihre gewünschte Vagrantfile versenden und Benutzer sagen einfach vagrant up und kevin wird automatisch einsatzbereit.