Le concept d'hôtes bastion n'a rien de nouveau en informatique. Les hôtes Baston sont généralement des systèmes renforcés destinés au public qui servent de point d'entrée aux systèmes derrière un pare-feu ou un autre emplacement restreint, et ils sont particulièrement populaires avec l'essor du cloud computing.
Le ssh
La commande a un moyen simple d'utiliser des hôtes bastion pour se connecter à un hôte distant avec une seule commande. Au lieu d'utiliser d'abord SSH vers l'hôte bastion, puis d'utiliser ssh
sur le bastion pour se connecter à l'hôte distant, ssh
peut créer lui-même les connexions initiale et secondaire à l'aide de ProxyJump
.
ProxyJump
Le ProxyJump
, ou le -J
flag, a été introduit dans ssh
versions 7.3. Pour l'utiliser, spécifiez l'hôte bastion auquel se connecter après le -J
flag, plus l'hôte distant :
$ ssh -J <bastion-host> <remote-host>
Vous pouvez également définir des noms d'utilisateur et des ports spécifiques s'ils diffèrent d'un hôte à l'autre :
$ ssh -J user@<bastion:port> <user@remote:port>
Le ssh
page man (ou manuel) (man ssh
) note que plusieurs noms d'hôte séparés par des virgules peuvent être spécifiés pour parcourir une série d'hôtes :
$ ssh -J <bastion1>,<bastion2> <remote>
Cette fonctionnalité est utile s'il existe plusieurs niveaux de séparation entre un bastion et l'hôte distant final. Par exemple, un hôte bastion public donnant accès à un ensemble d'hôtes de "niveau Web", au sein duquel un autre groupe protégé de "niveau base de données" peut être accessible.
Hôtes proxy codés en dur dans ~/.ssh/config
Le -J
flag fournit une flexibilité pour spécifier facilement les hôtes proxy et distants selon les besoins, mais si un hôte bastion spécifique est régulièrement utilisé pour se connecter à un hôte distant spécifique, le ProxyJump
la configuration peut être définie dans ~/.ssh/config
pour établir automatiquement la connexion au bastion en route vers l'hôte distant :
### The Bastion Host
Host bastion-host-nickname
HostName bastion-hostname
### The Remote Host
Host remote-host-nickname
HostName remote-hostname
ProxyJump bastion-host-nickname
En utilisant l'exemple de configuration ci-dessus, lorsqu'un ssh
la connexion se fait comme suit :
$ ssh remote-host-nickname
Le ssh
La commande crée d'abord une connexion à l'hôte bastion bastion-hostname
(l'hôte référencé, par pseudonyme, dans le ProxyJump
de l'hôte distant paramètres) avant de se connecter à l'hôte distant.
Une alternative :transférer stdin et stdout
ProxyJump
est la manière simplifiée d'utiliser une fonctionnalité qui ssh
possède depuis longtemps : ProxyCommand
. ProxyCommand
fonctionne en transférant l'entrée standard (stdin) et la sortie standard (stdout) de la machine distante via les hôtes proxy ou bastion.
La ProxyCommand
lui-même est une commande spécifique utilisée pour se connecter à un serveur distant - dans le cas de l'exemple précédent, ce serait le manuel ssh
commande utilisée pour se connecter en premier au bastion :
$ ssh -o ProxyCommand="ssh -W %h:%p bastion-host" remote-host
Le %h:%p
arguments du -W
drapeau ci-dessus spécifie de transférer l'entrée et la sortie standard vers l'hôte distant (%h
) et le port de l'hôte distant (%p
).
ProxyCommand
dans ~/.ssh/config
Comme avec ProxyJump
, ProxyCommand
peut être défini dans le ~/.ssh/config
fichier pour les hôtes qui utilisent toujours cette configuration :
Host remote-host
ProxyCommand ssh bastion-host -W %h:%p
Avec ce paramètre dans ~/.ssh/config
, n'importe quel ssh
la connexion à l'hôte distant est réalisée en transférant stdin et stdout via une connexion sécurisée depuis bastion-host
.
Le ssh
La commande est un outil puissant. Bien qu'il puisse être principalement utilisé dans sa forme la plus simple, ssh user@hostname
, il existe littéralement des dizaines d'utilisations, avec des drapeaux et des configurations pour établir des connexions d'un hôte à un autre. Découvrez ssh
la page de manuel de (man ssh
) pour découvrir toutes les différentes options disponibles avec ce programme apparemment simple.