I'm not sure if it's about any existing bug, or a completely new enhancement, or whether what I'm trying to do is against the vagrant design.
> I want to change the sshd port on the guest dynamically. I start with a box setup with sshd on port 22, change the port to let's say 222, restart sshd. I want vagrant to be able to interact with that guest on the new port. ### Vagrant version $ VBoxManage -version 5.1.30r118389 $ vagrant --version Vagrant 2.0.1 $ vagrant plugin list vagrant-share (1.1.9, system) ### Host operating system $ cat /etc/*release | grep 'VERSION=' VERSION="16.04.3 LTS (Xenial Xerus)" ### Guest operating system https://app.vagrantup.com/centos/boxes/7 ### Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : SSH_GUEST_PORT = ENV.fetch('SSH_GUEST_PORT', 22) # 1. vagrant up # 2. vagrant ssh -c 'sudo netstat -ntlp | grep ssh' # 3. vagrant ssh -c 'sudo sed -i "s/#Port 22/Port 222/" /etc/ssh/sshd_config' # 4. vagrant ssh -c 'sudo sed -i "s/^SELINUX=.*/SELINUX=permissive/" /etc/selinux/config' # 5. vagrant ssh -c 'getenforce&& sudo service sshd restart&& sudo netstat -ntlp | grep ssh&& sudo sync && sudo grep 222 /etc/ssh/sshd_config' # 6. SSH_GUEST_PORT=222 GUI=1 vagrant reload BOX = ENV.fetch('BOX', 'centos/7') # http://stackoverflow.com/questions/23926945/specify-headless-or-gui-from-command-line def gui_enabled? !ENV.fetch('GUI', '').empty? end Vagrant.configure(2) do |config| config.vm.define 'centos7' do |machine| machine.vm.box = BOX machine.vm.box_url = machine.vm.box machine.vm.provider 'virtualbox' do |p| p.memory = 256 p.cpus = 1 p.gui = gui_enabled? end # https://realguess.net/2015/10/06/overriding-the-default-forwarded-ssh-port-in-vagrant/ machine.vm.network :forwarded_port, guest: SSH_GUEST_PORT, host: 2200, id: 'ssh', auto_correct: true machine.ssh.guest_port = SSH_GUEST_PORT puts 'SSH_GUEST_PORT ' + SSH_GUEST_PORT.to_s end config.vm.define 'centos7' do |machine| machine.vm.provision :shell, :inline => 'hostnamectl set-hostname centos7' machine.vm.provision :shell, :inline => 'yum -y install net-tools lsof' machine.vm.provision :shell, :inline => 'setenforce 0', run: 'always' end end ### Debug output ### Expected behavior vagrant connects to the guest over the new sshd port ### Actual behavior Note the unexpected `Port 22` reported by `vagrant ssh-config`. Vagrant is unable to connect to the box. Verify in the Virtualbox GUI that sshd is actually listening on 222 after reboot, since it happens sometimes that `/etc/ssh/sshd_config` is empty after `vagrant reload` reboot and sshd starts on the default `Port 22`. ### Steps to reproduce $ unset SSH_GUEST_PORT $ BOX='bento/centos-7.4' vagrant up Bringing machine 'centos7' up with 'virtualbox' provider... ==> centos7: Importing base box 'bento/centos-7.4'... ==> centos7: Matching MAC address for NAT networking... ==> centos7: Checking if box 'bento/centos-7.4' is up to date... ==> centos7: Setting the name of the VM: vagrant_other_sshd_centos7_1512054292366_34932 ==> centos7: Fixed port collision for 22 => 2200. Now on port 2202. ==> centos7: Clearing any previously set network interfaces... ==> centos7: Preparing network interfaces based on configuration... centos7: Adapter 1: nat ==> centos7: Forwarding ports... centos7: 22 (guest) => 2202 (host) (adapter 1) ==> centos7: Running 'pre-boot' VM customizations... ==> centos7: Booting VM... ==> centos7: Waiting for machine to boot. This may take a few minutes... centos7: SSH address: 127.0.0.1:2202 centos7: SSH username: vagrant centos7: SSH auth method: private key $ vagrant ssh -c 'sudo netstat -ntlp | grep ssh' tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 958/sshd tcp6 0 0 :::22 :::* LISTEN 958/sshd $ vagrant ssh -c 'sudo sed -i "s/#Port 22/Port 222/" /etc/ssh/sshd_config' $ vagrant ssh -c 'sudo sed -i "s/SELINUX=.*/SELINUX=permissive/" /etc/selinux/config' $ vagrant ssh-config Host centos7 HostName 127.0.0.1 User vagrant Port 2202 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /vagrant/vagrant_other_sshd/.vagrant/machines/centos7/ virtualbox/private_key IdentitiesOnly yes LogLevel FATAL $ vagrant ssh -c 'getenforce&& sudo service sshd restart&& sudo netstat -ntlp | grep ssh&& sudo sync && sudo grep 222 /etc/ssh/sshd_config' Permissive Redirecting to /bin/systemctl restart sshd.service tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN 2931/sshd tcp6 0 0 :::222 :::* LISTEN 2931/sshd Port 222 $ SSH_GUEST_PORT=222 GUI=1 BOX='bento/centos-7.4' vagrant reload ==> centos7: Attempting graceful shutdown of VM... centos7: Guest communication could not be established! This is usually because centos7: SSH is not running, the authentication information was changed, centos7: or some other networking issue. Vagrant will force halt, if centos7: capable. ==> centos7: Forcing shutdown of VM... ==> centos7: Checking if box 'centos/7' is up to date... ==> centos7: Clearing any previously set forwarded ports... ==> centos7: Fixed port collision for 222 => 2200. Now on port 2201. ==> centos7: Clearing any previously set network interfaces... ==> centos7: Preparing network interfaces based on configuration... centos7: Adapter 1: nat ==> centos7: Forwarding ports... centos7: 222 (guest) => 2201 (host) (adapter 1) ==> centos7: Running 'pre-boot' VM customizations... ==> centos7: Booting VM... ==> centos7: Waiting for machine to boot. This may take a few minutes... centos7: SSH address: 127.0.0.1:222 centos7: SSH username: vagrant centos7: SSH auth method: private key centos7: Warning: Connection refused. Retrying... $ vagrant ssh-config Host centos7 HostName 127.0.0.1 User vagrant Port 22 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /vagrant/vagrant_other_sshd/.vagrant/machines/centos7/ virtualbox/private_key IdentitiesOnly yes LogLevel FATAL ### References -- This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list. GitHub Issues: https://github.com/mitchellh/vagrant/issues IRC: #vagrant on Freenode --- You received this message because you are subscribed to the Google Groups "Vagrant" group. To unsubscribe from this group and stop receiving emails from it, send an email to vagrant-up+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vagrant-up/1a3d3fd8-af51-46da-af5a-22baeb8d5378%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.