Proxmox 4 partie 3 : Connection via ssh

Nous avons vus dans les deux anciens post:

Nous allons voir comment simplifier l’accès en mettant un accès SSH sur chaque instance. Pour se connecter à l’instance 101. La commande sera

1
ssh deploy@<url/ip du proxmox> -p50101

Enfin je donne la version complète du fichier ipstable_start.sh

Introduction

Pour se connecter sur un instance pour le moment on est obligé de passé par l’interface graphique ou par la ligne de commande. La ligne de commande n’est pas évidente( pour quitter Ctrl A + q) et pas pratique. On aimerait pourvoir se connecter via l’extérieur pour mettre en place du déploiement automatique genre capistrano

Par rapport au PROXMOX 3.

Avec OpenVZ par défaut le ssh est ouvert pour l’utilisateur root. Ce n’est pas le cas sur LXC. Deux possibilités:

  • Ajouter un utilisateur deploy : sudo adduser deploy sur l’instance, c’est d’ailleurs en un sens inévitable si vous travaillez en équipe.
  • Ou autoriser l’utilisateur root à se connecter à l’extérieur. Il faut modifier le fichier /etc/ssh/sshd_config sur l’instance et modifier la ligne PermitRootLogin without-password à PermitRootLogin yes

Redirection via iptable

voici la syntaxe pour la machine vm101. On redirige le port 50101 du proxmox vers la vm101 port 22

1
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 50101 -j DNAT --to-destination 192.168.15.101:22

On peut faire une boucle for pour créer par défaut. vm101->50101, vm102->50102, ..

1
2
3
4
5
for i in {1..200}
do
   let "inport=50+$i"
   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport $inport -j DNAT --to-destination 192.168.15.$i:22
done

Il y aussi des règles sur mesure, Dans mon fichier vous verrez l’exemple de Node+Socket.io ou je redirige le port 8000 du proxmox vers l’instance 102

1
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8000 -j DNAT --to-destination 192.168.15.102:8000

Enfin le fichier final.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash

#vider table NAT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# On laisse sortir les vm
iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -o vmbr0 -j MASQUERADE

# Je redirige tout le trafic web vers instance nginx

iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to-destination 192.168.15.<instance du nginx>:80

# Les instances sont joignable via la commande suivante
# ssh <user_instance>@<ip ou url du proxmox> -p 50+<instance>
# par exemple:
# ssh deploy@monadress.com -p 50102
# se connecte sur le vm102 avec l'utilisateur deploy (capistrano)
for i in {1..200}
do
   let "inport=50+$i"
   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport $inport -j DNAT --to-destination 192.168.15.$i:22
done

# la vm 102 est un node.js+socket.io
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8000 -j DNAT --to-destination 192.168.15.102:8000

Un exemple pour capistrano

un exemple pour la vm101 (si l’utilisateur deploy existe..)

Un morceau de deploy.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ssh_options[:port] = 50101
# path the directory
set :deploy_to,   "/var/www/le_projet/"
set :branch, 'master'

set :domain,      "<url du proxmox>"
role :web,        domain                         # Your HTTP server, Apache/etc
role :app,        domain, :primary => true       # This may be the same as your `Web` server
role :db,         domain, :primary => true       # This may be the same as your `Web` server

# Use SSH agent forwarding to deploy via Capistrano
ssh_options[:forward_agent] = true

# Set user 
set :user, "deploy"
set :group, "deploy"

Alors la commande

1
cap deploy

se connecte tout seul sur la Vm

La documentation de capistrano est bien faite. Pour Symfony il existe capyfony mais c’est depreacted depuis..

Conclusion

J’ai eu beaucoup de mal à trouver des documentations à jours pour le PROXMOX 4. Cette série d’article contient le résultat de mes recherches. (Je remercie aussi mes collègues pour l’aide).

Il y a plein de liens qui expliquent beaucoup mieux que moi. N’hésitez pas à commencer par ceux-là et revenez sur mes posts pour adapter de proxmox3 à proxmox4. Je pense surtout à

Merci de m’avoir lu.