PuPHPet, Vagrant et SSH - Délai de connexion SSH

2

J'ai construit un nouveau boîtier vagabond CentOS 6.5 et, après le provisionnement, la connexion SSH n'arrête pas. J'ai essayé les étapes dans Vagrant. Ssh échoue avec VirtualBox mais je reçois des erreurs (voir ci-dessous). J'ai d'abord pensé que cela pourrait être un problème avec mon / etc / hosts, mais après avoir commenté tout conflit potentiel, j'ai toujours le même problème; alors, j'ai créé une boîte vagabonde Ubuntu 14.04 et cette machine a démarré sans problème. Les deux fichiers Vagrantfiles / config.yaml de la machine ont été construits avec PuPHPet.com.

Les détails de l'hôte:

Host OS: Kubuntu 14.04 (3.13.0-29-generic)
Virtualbox: 4.3.12 r93733
Vagrant: 1.6.0
Basebox: puphpet/centos65-x64   (virtualbox, 1.0.1)

Après avoir modifié mon Vagrantfile pour inclure des directives d'activation de l'interface graphique et défini le nombre maximal de tentatives à 150 (conformément au thread ci-dessus), j'ai reçu les messages d'erreur suivants:

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

SSH:
* The following settings shouldn't exist: max_tries

vm:
* The following settings shouldn't exist: boot_mode

Donc, je les ai depuis retirés. J'ai démarré la machine avec VirtualBox, et tout s'est bien passé.

IP assigné: 192.168.56.101

Le fichier de configuration / etc / sysconfig / network-scripts / ifcfg-eth1 est le suivant:

DEVICE="eth1"
BOOTPROTO="none"
IPV6INIT="yes"
MTU="1500"
NM_CONTROLLER="yes"
ONBOOT="yes"
TYPE="Ethernet"
#VAGRANT-BEGIN
NM_CONTROLLER=no
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.56.101
NETMASK=255.255.255.0
DEVICE=eth1
PEERDNS=no
#VAGRANT-END

[En apartement] Tandis que je tapais cela (je ne pouvais malheureusement pas copier / coller à partir de la CLI de VM), j'ai remarqué qu'il y avait une deuxième déclaration NM_CONTROLLED, je vais donc commenter le NM_CONTROLLED="yes"moment présent pour le nettoyer. [/De côté]

Je continue d'avancer ... Je suis en mesure d'interroger l'invité de l'hôte. et, j'ai essayé de ssh en utilisant la méthode standard (ssh [email protected]) mais j'ai reçu une erreur indiquant No route to host.

$ ping 192.168.56.101
PING 192.168.56.101 (192.168.56.101) 56(84) bytes of data.
64 bytes from 192.168.56.101: icmp_seq=1 ttl=64 time=1.94 ms
64 bytes from 192.168.56.101: icmp_seq=2 ttl=64 time=0.430 ms
^C
--- 192.168.56.101 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.430/1.187/1.945/0.758 ms

[03:03 PM]-[josej@josej-desktop]-[~/Projects/CentOS-6.5]
$ ssh [email protected]
ssh: connect to host 192.168.56.101 port 22: No route to host

De toute évidence, il existe un itinéraire vers l'hôte, car je peux y envoyer une requête ping;) Donc, je pensais que le sshd ne fonctionnait pas mais comme on peut le voir ci-dessous, il est:

[vagrant@localhost ~]$ ps aux | grep sshd
root    1321    0.0    0.1    66608    1200 ?        Ss    20:02    0:00 /usr/sbin/sshd

Je m'attendais à ce qu'il refuse la connexion car je ne suis pas passé dans la clé SSH, mais comme ce n'est pas le cas et que sshd est en cours d'exécution.

Alors, j'ai ensuite testé si l'invité pouvait ou non envoyer une requête ping à Google, ce qui a échoué. Donc, vérifiant routenous voyons:

[vagrant@localhost ~]$ route
Kernel IP routing table
Destination    Gateway    Genmask         ... Iface
10.0.2.0       *          255.255.255.0   ... eth0
192.168.56.0   *          255.255.255.0   ... eth1

Donc, ma meilleure hypothèse est qu'il y a un problème de réseau quelque part. Étant donné que l'hôte peut envoyer une requête ping à l'invité et que l'invité peut envoyer une requête ping à l'hôte ( ping 192.168.56.1fonctionne), le fichier de route a une bonne apparence et la configuration réseau est correcte, mais l'invité ne peut atteindre aucune destination située au-delà de la passerelle ... Je suis assez perplexe à ce stade.

Je vais aller fouiller dans les iptables et désactiver SELinux pour le moment. Espérons que cela aidera à préciser le problème. Quoi qu'il en soit, je suis ouvert à tout conseil, car cela fait deux jours que je me bats avec cela et que je ne suis que tournant en rond.

Et, enfin, voici le fichier Vagrantfile et puphpet / config.yaml:

require 'yaml'

dir = File.dirname(File.expand_path(__FILE__))

configValues = YAML.load_file("#{dir}/puphpet/config.yaml")
data = configValues['vagrantfile-local']

Vagrant.configure("2") do |config|
  config.vm.box = "#{data['vm']['box']}"
  config.vm.box_url = "#{data['vm']['box_url']}"

  if data['vm']['hostname'].to_s.strip.length != 0
    config.vm.hostname = "#{data['vm']['hostname']}"
  end

  if data['vm']['network']['private_network'].to_s != ''
    config.vm.network "private_network", ip: "#{data['vm']['network']['private_network']}"
  end

  data['vm']['network']['forwarded_port'].each do |i, port|
    if port['guest'] != '' && port['host'] != ''
      config.vm.network :forwarded_port, guest: port['guest'].to_i, host: port['host'].to_i
    end
  end

  data['vm']['synced_folder'].each do |i, folder|
    if folder['source'] != '' && folder['target'] != ''
      nfs = (folder['nfs'] == "true") ? "nfs" : nil
      if nfs == "nfs"
        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs
      else
        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs,
          group: 'www-data', owner: 'www-data', mount_options: ["dmode=775", "fmode=764"]
      end
    end
  end

  config.vm.usable_port_range = (10200..10500)

  if data['vm']['chosen_provider'].empty? || data['vm']['chosen_provider'] == "virtualbox"
    ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

    config.vm.provider :virtualbox do |virtualbox|
      data['vm']['provider']['virtualbox']['modifyvm'].each do |key, value|
        if key == "memory"
          next
        end

        if key == "natdnshostresolver1"
          value = value ? "on" : "off"
        end

        virtualbox.customize ["modifyvm", :id, "--#{key}", "#{value}"]
      end

      virtualbox.customize ["modifyvm", :id, "--memory", "#{data['vm']['memory']}"]

      if data['vm']['hostname'].to_s.strip.length != 0
        virtualbox.customize ["modifyvm", :id, "--name", config.vm.hostname]
      end
    end
  end

  if data['vm']['chosen_provider'] == "vmware_fusion" || data['vm']['chosen_provider'] == "vmware_workstation"
    ENV['VAGRANT_DEFAULT_PROVIDER'] = (data['vm']['chosen_provider'] == "vmware_fusion") ? "vmware_fusion" : "vmware_workstation"

    config.vm.provider "vmware_fusion" do |v|
      data['vm']['provider']['vmware'].each do |key, value|
        if key == "memsize"
          next
        end

        v.vmx["#{key}"] = "#{value}"
      end

      v.vmx["memsize"] = "#{data['vm']['memory']}"

      if data['vm']['hostname'].to_s.strip.length != 0
        v.vmx["displayName"] = config.vm.hostname
      end
    end
  end

  if data['vm']['chosen_provider'] == "parallels"
    ENV['VAGRANT_DEFAULT_PROVIDER'] = "parallels"

    config.vm.provider "parallels" do |v|
      data['vm']['provider']['parallels'].each do |key, value|
        if key == "memsize"
          next
        end

        v.customize ["set", :id, "--#{key}", "#{value}"]
      end

      v.memory = "#{data['vm']['memory']}"

      if data['vm']['hostname'].to_s.strip.length != 0
        v.name = config.vm.hostname
      end
    end
  end

  ssh_username = !data['ssh']['username'].nil? ? data['ssh']['username'] : "vagrant"

  config.vm.provision "shell" do |s|
    s.path = "puphpet/shell/initial-setup.sh"
    s.args = "/vagrant/puphpet"
  end
  config.vm.provision "shell" do |kg|
    kg.path = "puphpet/shell/ssh-keygen.sh"
    kg.args = "#{ssh_username}"
  end
  config.vm.provision :shell, :path => "puphpet/shell/update-puppet.sh"

  config.vm.provision :puppet do |puppet|
    puppet.facter = {
      "ssh_username"     => "#{ssh_username}",
      "provisioner_type" => ENV['VAGRANT_DEFAULT_PROVIDER'],
      "vm_target_key"    => 'vagrantfile-local',
    }
    puppet.manifests_path = "#{data['vm']['provision']['puppet']['manifests_path']}"
    puppet.manifest_file = "#{data['vm']['provision']['puppet']['manifest_file']}"
    puppet.module_path = "#{data['vm']['provision']['puppet']['module_path']}"

    if !data['vm']['provision']['puppet']['options'].empty?
      puppet.options = data['vm']['provision']['puppet']['options']
    end
  end

  config.vm.provision :shell do |s|
    s.path = "puphpet/shell/execute-files.sh"
    s.args = ["exec-once", "exec-always"]
  end
  config.vm.provision :shell, run: "always" do |s|
    s.path = "puphpet/shell/execute-files.sh"
    s.args = ["startup-once", "startup-always"]
  end
  config.vm.provision :shell, :path => "puphpet/shell/important-notices.sh"

  if File.file?("#{dir}/puphpet/files/dot/ssh/id_rsa")
    config.ssh.private_key_path = [
      "#{dir}/puphpet/files/dot/ssh/id_rsa",
      "#{dir}/puphpet/files/dot/ssh/insecure_private_key"
    ]
  end

  if !data['ssh']['host'].nil?
    config.ssh.host = "#{data['ssh']['host']}"
  end
  if !data['ssh']['port'].nil?
    config.ssh.port = "#{data['ssh']['port']}"
  end
  if !data['ssh']['username'].nil?
    config.ssh.username = "#{data['ssh']['username']}"
  end
  if !data['ssh']['guest_port'].nil?
    config.ssh.guest_port = data['ssh']['guest_port']
  end
  if !data['ssh']['shell'].nil?
    config.ssh.shell = "#{data['ssh']['shell']}"
  end
  if !data['ssh']['keep_alive'].nil?
    config.ssh.keep_alive = data['ssh']['keep_alive']
  end
  if !data['ssh']['forward_agent'].nil?
    config.ssh.forward_agent = data['ssh']['forward_agent']
  end
  if !data['ssh']['forward_x11'].nil?
    config.ssh.forward_x11 = data['ssh']['forward_x11']
  end
  if !data['vagrant']['host'].nil?
    config.vagrant.host = data['vagrant']['host'].gsub(":", "").intern
  end
end

Config.yaml

---
vagrantfile-local:
    vm:
        box: puphpet/centos65-x64
        box_url: puphpet/centos65-x64
        hostname: null
        memory: '1024'
        chosen_provider: virtualbox
        network:
            private_network: 192.168.56.101
            forwarded_port:
                RVPy8vdfEyb4:
                    host: '5329'
                    guest: '22'
        provider:
            virtualbox:
                modifyvm:
                    natdnshostresolver1: on
                setextradata:
                    VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root: 1
            vmware:
                numvcpus: 1
            parallels:
                cpus: 1
        provision:
            puppet:
                manifests_path: puphpet/puppet
                manifest_file: manifest.pp
                module_path: puphpet/puppet/modules
                options:
                    - '--verbose'
                    - '--hiera_config /vagrant/puphpet/puppet/hiera.yaml'
                    - '--parser future'
        synced_folder:
            Fmuml1NNvztV:
                source: ./
                target: /var/www
                nfs: 'true'
        usable_port_range: 2200..2250
    ssh:
        host: null
        port: null
        private_key_path: null
        username: vagrant
        guest_port: null
        keep_alive: true
        forward_agent: false
        forward_x11: false
        shell: 'bash -l'
    vagrant:
        host: detect
server:
    packages:
        - vim-common
    dot_files:
        -
            bash_aliases: null
    _prevent_empty: ''
mailcatcher:
    install: '1'
    settings:
        smtp_ip: 0.0.0.0
        smtp_port: 1025
        http_ip: 0.0.0.0
        http_port: '1080'
        mailcatcher_path: /usr/local/bin
        log_path: /var/log/mailcatcher/mailcatcher.log
firewall:
    install: '1'
    rules:
        IzA1MvHnvQ4g:
            port: '10000'
            priority: '100'
            proto: tcp
            action: accept
apache:
    install: '1'
    settings:
        user: www-data
        group: www-data
        default_vhost: true
        manage_user: false
        manage_group: false
        sendfile: 0
    modules:
        - php
        - rewrite
    vhosts:
        jeFgLNotkCuO:
            servername: awesome.dev
            serveraliases:
                - www.awesome.dev
            docroot: /var/www/awesome
            port: '80'
            setenv:
                - 'APP_ENV dev'
            override:
                - All
            options:
                - Indexes
                - FollowSymLinks
                - MultiViews
            custom_fragment: ''
            ssl_cert: ''
            ssl_key: ''
            ssl_chain: ''
            ssl_certs_dir: ''
    mod_pagespeed: 0
    mod_spdy: 0
nginx:
    install: 0
    vhosts:
        ejsUD06Uwceq:
            server_name: awesome.dev
            server_aliases:
                - www.awesome.dev
            www_root: /var/www/awesome.dev
            listen_port: '80'
            index_files:
                - index.html
                - index.htm
                - index.php
            envvars:
                - 'APP_ENV dev'
            ssl_cert: ''
            ssl_key: ''
php:
    install: '1'
    version: '55'
    composer: '1'
    composer_home: ''
    modules:
        php:
            - cli
            - intl
            - mcrypt
        pear: {  }
        pecl:
            - pecl_http
    ini:
        display_errors: On
        error_reporting: '-1'
        session.save_path: /var/lib/php/session
    timezone: America/Chicago
xdebug:
    install: '1'
    settings:
        xdebug.default_enable: '1'
        xdebug.remote_autostart: '0'
        xdebug.remote_connect_back: '1'
        xdebug.remote_enable: '1'
        xdebug.remote_handler: dbgp
        xdebug.remote_port: '9000'
drush:
    install: 0
    settings:
        drush.tag_branch: 6.x
mysql:
    install: '1'
    root_password: '123'
    adminer: 0
    databases:
        JibsW5qqEtvE:
            grant:
                - ALL
            name: REDACTED
            host: localhost
            user: REDACTED
            password: '123'
            sql_file: ''
        TUQ8E8xUDyFi:
            grant:
                - ALL
            name: REDACTED
            host: localhost
            user: REDACTED
            password: '123'
            sql_file: ''
postgresql:
    install: '1'
    settings:
        root_password: '123'
        user_group: postgres
        encoding: UTF8
        version: '9.3'
    databases: {  }
    adminer: 0
mariadb:
    install: 0
    root_password: '123'
    adminer: 0
    databases: {  }
    version: '10.0'
mongodb:
    install: '1'
    settings:
        auth: 1
        port: '27017'
    databases: {  }
redis:
    install: '1'
    settings:
        conf_port: '6379'
beanstalkd:
    install: '1'
    settings:
        listenaddress: 0.0.0.0
        listenport: '13000'
        maxjobsize: '65535'
        maxconnections: '1024'
        binlogdir: /var/lib/beanstalkd/binlog
        binlogfsync: null
        binlogsize: '10485760'
    beanstalk_console: '1'
    binlogdir: /var/lib/beanstalkd/binlog
rabbitmq:
    install: 0
    settings:
        port: '5672'
elastic_search:
    install: '1'
    settings:
        java_install: true
        autoupgrade: true
DroBuddy
la source
SELinux est désactivé et j'ai modifié iptables pour accepter TCP en déport 22. Après avoir redémarré le service, je suis maintenant en mesure de ssh [email protected] mais le délai de mise en place est toujours dépassé. Je suis assez perplexe à ce stade ...
DroBuddy
Eh bien, après avoir couru, sudo service iptables offje peux maintenant accéder à Google, aux dépôts de yum, etc., de sorte que ce sera un problème d'iptables et non un problème de réseau. Maintenant, la partie amusante, en ajoutant dans toutes mes règles iptables nécessaires. Argh, cela était préconfiguré pour les boîtes de vagabonds construits à l'aide de l'outil PuPHPet. Apparemment, ce n'est plus le cas.
DroBuddy
Ah, j'ai oublié mon outil préféré: system-config-firewall-tui. Quel gain de temps. Je le recommande vivement à quiconque rencontre ce problème.
DroBuddy
Ce site fonctionne mieux lorsqu'il y a une question et une ou plusieurs réponses. Nous vous encourageons à ajouter une réponse à votre propre question.
Brian Adkins
Bon point. Je ferai ça. ;)
DroBuddy

Réponses:

4

Le problème était que les boîtes vagabondes CentOS de PuPHPet.com ne sont plus fournies avec un ensemble de règles de pare-feu par défaut. Donc, afin de résoudre ce problème, démarrez la machine virtuelle à l'aide de VirtualBox (ou de l'hyperviseur que vous utilisez), puis modifiez-la et enregistrez-la /etc/sysconfig/ptablespour autoriser les services de votre choix.

À mon avis, la meilleure façon de modifier les règles de votre iptables est à l'aide d' un outil CLI qui peut facilement être installé avec yum: sudo yum install -y system-config-frewall-tui. Cette interface utilisateur textuelle vous permet d’activer / désactiver facilement les services standard (httpd, bind, postfix, nfs, etc.) à l’aide de l’assistant, ainsi que de créer des règles personnalisées pour les ports / services non standard (tels que le port Webmin 10000). ). Cet outil est un vrai gain de temps.

Si cela ne résout pas vos problèmes de connectivité, afin de déterminer s'il s'agit ou non d'un pare-feu, lancez-le sudo service iptables offsur l'invité et tentez un accès SSH à partir de host ( ssh vagrant@my-host-name-or-ip).

Si vous avez maintenant un accès SSH, alors le problème sera un problème de FW et vous devrez revérifier vos iptables ( avez-vous enregistré vos modifications? ). Si vous ne parvenez toujours pas à obtenir un accès SSH, alors il est très probablement un problème de réseau et doit être en conséquence analysé les causes (vérifier ifconfig, route, pinger de l'hôte à l'invité et vice - versa, etc.).

HTH.

DroBuddy
la source