Faciliter la connexion au serveur
Cette partie n’est valable que pour les systèmes basés sur Unix (linux, Mac OS X...)
Il est souvent nécessaire, pour se connecter à un serveur distant de taper des commandes à rallonge du type :
- ssh user@IP_DU_SERVEUR
- # ou par exemple
- ssh user@sous_domaine.mon_domaine.tld
Alors qu’il serait plus simple de taper une commande simple de la sorte :
- ssh serveur
Ici serveur
est un alias de user@sous_domaine.mon_domaine.tld
ou de user@IP_DU_SERVEUR
[1]
La configuration des clients se fait dans le fichier ~/.ssh/config
(à noter que le ~/
désigne le dossier "Home" de l’utilisateur en cours). Nous allons donc éditer ce fichier (cela le créera au cas où il n’existe pas) :
- nano ~/.ssh/config
Pour notre exemple, nous allons ajouter les lignes suivantes :
- Host serveur #"serveur" est l'identifiant que vous souhaitez utiliser pour la machine
- Hostname XXX.XXX.XXX.XXXX # Adresse IP ou FQDN de la machine
- User user # "user" est l'utilisateur avec lequel nous souhaitons nous connecteur
- # Port 4528 # Port à utiliser si le serveur ssh n'est pas configuré sur le port habituel (22)
Vous pouvez définir plusieurs serveurs dans le même fichier bien entendu du genre :
- Host serveur1
- Hostname sous_domaine.mon_domaine.tld
- User user1
- Port 4528
- Host serveur2
- Hostname IP_DU_SERVEUR
- User user2
Il est également possible de définir dans ce fichier de congiguration une ou plusieurs sections génériques à base de wildcards pour regrouper des éléments de configurations par exemple :
- Host *
- # Ici nous allons mettre l'ensemble des directives pour tous les hotes
- Host *.mon_domaine.tld
- # Ici nous allons mettre l'ensemble des directives pour tous les sous domaines de mon_domaine.tld
- Host serveur*
- # Ici nous allons mettre l'ensemble des directives pour tous les hotes commençant par serveur
Ces options sont cumulatives donc chaque Host
bénéficiera des directives de la première définition Host *
, puis des autres définies s’il correspond à l’une ou l’autre des règles.
Les options sont facultatives, vous devez les modeler en fonction de vos besoins.
D’autres options sont également disponibles et la lecture de la commande man ssh_config
vous aidera à mieux les comprendre.
Liste non exhaustive des options
-
Hostname
: nom d’hôte ou adresse IP de la machine sur laquelle se connecter ; -
User
: nom d’utilisateur à utiliser pour se connecter ; -
Port
: port réseau à utiliser ; -
IdentityFile
: chemin vers la clé d’identification publique à utiliser (par exemple :~/.ssh/ma_cle.pub
) ; -
ProxyCommand
: spécifie la commande proxy à lancer avant la connexion au serveur (utile lorsque l’on doit se connecter à une autre machine faisant office de passerelle) ;
Cas spécifiques d’utilisation du fichier config
Connexion à travers une passerelle
Imaginons le cas où l’on souhaite se connecter à une machine dans un réseau local dont le port utilisé par le ssh n’est pas exposé à Internet mais seulement dans un réseau local, ou que cette machine n’autorise via sa configuration (firewall...) la connexion que via une adresse IP spécifique.
Dans ce cas, il est nécessaire de se connecter à une machine dite passerelle (gateway) avant d’être connecté au serveur souhaité. La méthode la plus simple mais la plus longue et ennuyante consisterait à se connecter à la première machine :
- ssh user1@passerelle.mondomaine.com
Puis depuis la seconde machine, refaire l’opération pour se connecter au serveur final :
- ssh user1@serveur.mondomaine.com
Soit lancer deux commandes. On peut alors enchaîner les deux commandes de la sorte pour le faire en une seule fois :
- ssh -A user1@passerelle.mondomaine.com ssh user1@serveur.mondomaine.com
Mais cela posera forcément des problèmes que ce soit d’écriture ou de possibilités offertes.
Pour faciliter cela, on peut utiliser le fichier config
expliqué ci-dessus avec l’option ProxyCommand
.
On ouvre le fichier config
:
- nano ~/.ssh/config
Et on y ajoute notre définition d’hôte qui doit ressembler à cela :
- Host serveur
- Hostname xx.xx.xxx.xx # Nom d'hôte ou adresse IP du serveur sur lequel on souhaite se connecter
- ProxyCommand ssh -q yyy.yyy.yy.yyy nc %h %p # La commande à utiliser en proxy, exécutée avant la connection au serveur
La partie importante est l’option ProxyCommand
. Elle lance une commande avant la connexion au serveur final, ici une connexion à la passerelle dont l’adresse IP ou le nom d’hôte est yyy.yyy.yy.yyy
.
Cette commande a deux variables :
-
%h
qui correspond au nom d’hote ou l’adresse IP défini dans l’optionHostname
, la passerelle doit pouvoir accéder à ce nom d’hôte ou cette IP ; -
%p
est le port à utiliser, elle sera remplacée par l’optionPort
si présente, sinon elle prendre la valeur par défaut à savoir22
;
On peut maintenant se connecter au serveur en utilisant la commande :
- ssh serveur
Cela permet notamment de simplifier énormément la commande à taper mais également la connexion en scp par exemple.
Lancer une commande directement sur le serveur
Il est très simple de lancer une commande sur un serveur distant en une ligne (utile pour toute utilisation dans un script par exemple). Il suffit de passer la commande, contenue entre deux guillemets simples à la suite de la commande de connexion comme par exemple :
- ssh user@serveur 'restart'
Cette commande redémarrera le serveur serveur
si l’utilisateur user
dispose des droits nécessaires.