web-dev-qa-db-fra.com

SSH dans Vagrant Box avec un nom d'utilisateur différent

Plutôt que d'utiliser ssh sur ma machine virtuelle Vagrant avec un nom d'utilisateur et un mot de passe "vagabonds", j'aimerais utiliser kevin/kevin.

J'ai modifié mon Vagrantfile pour inclure:

config.ssh.username = "kevin"

Ensuite, j'ai couru vagrant reload.

La sortie suivante est apparue:

[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.

Cependant, je pouvais toujours ssh sur ma boîte vagabonde en utilisant vagrant/vagrant, mais je ne pouvais pas ssh sur la boîte avec un nom d'utilisateur et un mot de passe kevin/kevin ou kevin/vagrant.

Notez que j'ai également essayé cette réponse ( https://stackoverflow.com/a/9924122/409976 ), mais je ne pouvais que ssh sur la boîte avec le nom d'utilisateur vagrant, pas kevin (même si cela est spécifié dans le Vagrantfile).

Comment puis-je configurer mon Vagrantfile afin que je puisse ssh en utilisant le nom d'utilisateur kevin?

40
Kevin Meredith

Vous pouvez accéder à la boîte en utilisant vagrant mais PAS kevin, c'est prévu.

La plupart des boîtiers de base Vagrant n'ont que 2 utilisateurs avec accès SSH, root et vagrant. Ils utilisent tous les deux vagrant comme mot de passe, de plus, vagrant est configuré pour l'authentification par clé publique en utilisant la paire de clés non sécurisée (pourquoi? Voir non sécurisée par défaut? ) paire de clés fournie dans le projet Vagrant sur GitHub.

Pour pouvoir vous connecter en tant que kevin, vous devrez ssh dans la boîte et créer l'utilisateur (useradd -m -s /bin/bash -U kevin) tout d'abord, configurez l'authentification par clé publique (de nombreuses façons, par exemple ssh-copy-id, Je vous le laisse.)

Vous devriez pouvoir ssh dans la boîte après avoir créé l'utilisateur en utilisant vagrant ssh si vous définissez correctement config.ssh.username dans Vagrantfile.

Bien sûr, vous pouvez manuellement ssh dans la boîte par (supposez NAT est en cours d'utilisation)

ssh -p 2222 kevin@localhost

ou (sous Linux)

ssh -p 2222 -i /opt/vagrant/embedded/gems/gems/vagrant-1.5.1/keys/vagrant.pub vagrant@localhost

53
Terry Wang

Une autre solution, après avoir ajouté un utilisateur à Vagrant via votre script de provisioning:

## 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

ajoutez ceci à votre fichier Vagrant:

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

Maintenant, Vagrant utilisera l'utilisateur par défaut vagrant pour approvisionner votre machine virtuelle, mais une fois qu'il est en place, vous pouvez utiliser le simple vagrant ssh pour vous connecter en tant que kevin via la clé ssh Vagrant par défaut.

De cette façon, vous pouvez expédier votre Vagrantfile souhaité et les utilisateurs disent simplement vagrant up et kevin devient automatiquement prêt à l'emploi.

21
Benny K

Créez un fichier vagabond comme celui ci-dessous. Notez que nous amorçons l'utilisateur vagabond pour passer immédiatement à l'utilisateur 'kevin' que nous avons créé.

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

maintenant ssh dans le 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.

kevin@kevin:/home/vagrant$
2
Aidan Melen

Un peu de hack, mais vous pouvez ajouter la ligne Sudo su - kevin à votre fichier .bash_profile et ajoutez kevin au fichier sudoers sans mot de passe.

Cela changera l'utilisateur actuel en kevin lors de la connexion en tant qu'utilisateur vagabond à partir de la ligne de commande.

L'avantage de cette approche est que NAT n'a pas besoin d'être activé.

1
Willem van Ketwich