This time shows the tutorial two topics in one. The first topic is: “How an easy to configure SSH host jump”. The 2nd topic is: “Provisioning examples for Vagrant”.
Precondition
- Vagrant installed
- VirtualBox installed
File content
--- - name: jump_host box: centos/7 ip: 192.168.100.10 cpus: 1 memory: 1024 - name: host_a box: centos/7 ip: 192.168.100.20 cpus: 1 memory: 1024 - name: host_b box: centos/7 ip: 192.168.100.30 cpus: 1 memory: 1024
Host * Compression yes AddressFamily inet Protocol 2 ServerAliveInterval 60 ServerAliveCountMax 30 Host jump_host HostName 192.168.x.x User testuser Host host_* ProxyCommand ssh jump_host -W %h:%p User testuser
# -*- mode: ruby -*- require 'yaml' machines = YAML.load_file('machines.yml') API_VERSION = "2" KEY_LOCATION = "~/.ssh/id_rsa.pub" Vagrant.require_version ">= 1.8.1" Vagrant.configure(API_VERSION) do |config| # loop machines.each do |machines| # vm setup + provisioning config.vm.define machines["name"] do |machine| machine.vm.box = machines["box"] machine.vm.synced_folder ".", "/vagrant", disabled: true machine.vm.network "private_network", ip: machines["ip"] machine.vm.provider :virtualbox do |vb| vb.name = machines["name"] vb.cpus = machines["cpus"] vb.memory = machines["memory"] vb.gui = false end # provisioning: only jump_host if machines["name"] == 'jump_host' # prompt for interface machine.vm.network "public_network" machine.vm.provision "shell", inline: <<-SHELL cd /etc && sudo sed -i '/#AllowTcpForwarding yes/c\AllowTcpForwarding yes' ssh/sshd_config sudo systemctl restart sshd.service cd /etc && sudo grep -q 'host_a' hosts || echo '192.168.100.20 host_a' >> hosts cd /etc && sudo grep -q 'host_b' hosts || echo '192.168.100.30 host_b' >> hosts SHELL end # provisioning: all machine.vm.provision "file", source: KEY_LOCATION, destination: "/tmp/pub.key" machine.vm.provision "shell", inline: <<-SHELL sudo useradd testuser sudo mkdir /home/testuser/.ssh sudo touch /home/testuser/.ssh/authorized_keys sudo cat /tmp/pub.key > /home/testuser/.ssh/authorized_keys sudo rm -f /tmp/pub.key sudo chmod 0700 /home/testuser/.ssh sudo chmod 0644 /home/testuser/.ssh/authorized_keys sudo chown -R testuser:testuser /home/testuser/.ssh SHELL end end end
Note: Replace values for HostName “192.168.x.x” by real IP from jump_host and KEY_LOCATION “~/.ssh/id_rsa.pub”!
Steps
# create and goto project $ mkdir ~/Projects/JumpHostExample && cd ~/Projects/JumpHostExample # create yaml file $ vim machines.yml # create Vagrantfile $ vim Vagrantfile # start Vagrant $ vagrant up # get IP from jump_host (for config) $ ssh jump_host -c "ip addr show enp0s9" # create or edit ssh config $ vim ~/.ssh/config # ssh into hosts via jump_host $ ssh host_a $ ssh host_b