Vagrant redirigeant ssh à partir du serveur distant
j'ai configuré vagrant pour exécuter une machine virtuelle sur un hôte. Ce que je voudrais faire, c'est être capable de SSH à partir d'autres machines directement dans le vagrant vm (c'est-à-dire, Je ne devrais pas SSH dans l'hôte et puis vagrant SSH, etc. dans le vagabond vm).
actuellement, je peux ssh ne pas utiliser vagrant SSH à partir de l'OS hôte en utilisant ssh vagrant@127.0.0.1 -p 2222
. Cependant, si j'exécute la même commande (remplaçant 127.0.0.1 par l'adresse ip de l'hôte), j'obtiens "SSH connect to host XXXXX port 2222: Connection refused."
j'ai essayé ajouter ma propre règle de redirection de port à vagrant:
config.vm.network :forwarded_port, guest: 22, host: 2222
mais cela ne permet pas la connexion ssh à partir de la machine hôte ou de toute autre machine du réseau. En outre, j'ai passé un certain temps avec config.ssh dans le vagabond docs. Je pense que la plupart de ces paramètres spécifient cependant sur quel port la VM errante exécute ssh.
Je ne pense vraiment pas que cela devrait être si difficile. Personne ne sait ce que je fais de mal, ou ce que je dois faire contrairement à ssh dans une VM vagabonde d'un serveur distant?
4 réponses
si vous ne voulez pas changer le réseau en réseau public, vous pouvez outrepasser le transfert de port par défaut pour ssh par ceci:
config.vm.network :forwarded_port, guest: 22, host: 2222, host_ip: "0.0.0.0", id: "ssh", auto_correct: true
ce sera le transfert guest 22 port à 2222 sur votre machine hôte et sera disponible à partir de n'importe quelle ip, de sorte que vous pouvez y accéder en dehors de votre machine locale.
depuis v1.2.3 Vagrant port forwarding par défaut binds avec 127.0.0.1 donc seules les connexions locales sont autorisées.
vous avez obtenu "connexion refusée" parce que le transfert de port n'était pas lié à vos interfaces réseau (par exemple eth0, wlan0). Le port 2222
sur votre hôte N'est même pas ouvert aux hôtes du même réseau (interfaces de loopback non accessibles aux autres hôtes).
si vous voulez SSH directement à la VM vagabonde à partir d'un hôte distant (dans le même LAN), la meilleure et la plus simple est d'utiliser le réseau Public (le mode de mise en réseau Bridged de VirtualBox).
ajouter ce qui suit à votre Vagrantfile
et faire un vagrant reload
.
il devrait passer par l'une des interfaces du réseau public, vous devriez être en mesure d'obtenir l'adresse IP après VM est up,vagrant ssh
et run ifconfig -a
ou ip addr
pour obtenir l'adresse IP ssh à partir des hôtes distants.
échantillon Vagrantfile
<!-- language: lang-rb -->
config.vm.network :public_network # 2nd interface bridged mode
ou plus avancé, vous pouvez définir interface réseau par défaut pour le réseau public
<!-- language: lang-rb -->
config.vm.network "public_network", :bridge => 'en1: Wi-Fi (AirPort)'
Voir plus => Réseau Public
Vous pouvez aussi ajouter une autre règle pour Vagrantfile
comme suit:
config.vm.network :forwarded_port, guest: 1234, host: 22
connectez-vous à Vagrant avec le port par défaut (2222) et éditez /etc/ssh/sshd_config
, puis AjouterPort 22
le port précédemment configuré comme 'guest', résultant:
...
Port 22 #Uncomment this line if it's commented
Port 1234
....
Enfin, redémarrez le démon ssh ou ne vagrant reload
(si vous avez modifié Vagrantfile
pendant que la VM était en cours d'exécution, vous devez la recharger) et maintenant vous pouvez vous connecter à Vagrant en utilisant le port' host ' (22 dans mon cas) depuis l'extérieur de l'hôte ordinateur.
vous ne pouvez pas supprimer le port par défaut, car Vagrant serait suspendu au démarrage.
Utiliser vagrant share --ssh
Vagrant dispose maintenant d'un service pour enregistrer un VM Vagrant pour accéder à distance SSH automatiquement.
Voir ici: https://www.vagrantup.com/docs/share/ssh.html
Vous appelez vagrant share --ssh
.
Cela génère une clé SSH (cryptée et protégée par un mot de passe)),
le télécharge vers un serveur Hashicorp,
et renvoie un nom de boîte mondial stupide (par exemple "rambunctious-deer-3496").
Alors tout le monde qui
- a un Hashicorp compte Atlas
- connaît le nom de la boîte,
- connaît le mot de passe pour la clé, et
- a installé Vagrant (!)
peut effectuer des SSH à distance à la boîte via
vagrant connect --ssh BOXNAME
.
Vagrant s'occupe de tout ce qui concerne l'administration dans les coulisses (voici quelques détails).
Fonctionne comme annoncé.
J' devinez ce fonctionne même si L'hôte Vagabond (pas seulement la VM) est derrière un NAT.
Limitations:
vagrant share
les sessions expirent (actuellement, après 8 heures)- attendez-vous à une certaine latence, parce que tout le trafic est (probablement) acheminés par l'Altas serveur
- j'ai vu mes connexions à distance se fermer (sans raison évidente) après que je ne les ai pas utilisés pendant peut-être 15 minutes.