Les serveurs de production de mon entreprise (FOO, BAR ...) sont situés derrière deux serveurs de passerelle (A, B). Pour me connecter au serveur FOO, je dois ouvrir une connexion ssh avec le serveur A ou B avec mon nom d'utilisateur JOHNDOE, puis depuis A (ou B) je peux accéder à n'importe quel serveur de production ouvrant une connexion SSH avec un nom d'utilisateur standard (appelons-le WEBBY).
Donc, chaque fois que je dois faire quelque chose comme:
ssh johndoe@a
...
ssh webby@foo
...
# now I can work on the server
Comme vous pouvez l'imaginer, c'est un problème lorsque je dois utiliser scp
ou si j'ai besoin d'ouvrir rapidement plusieurs connexions.
J'ai configuré une clé ssh et j'utilise également .ssh / config pour certains raccourcis.
Je me demandais si je pouvais créer une sorte de configuration ssh pour taper
ssh foo
et laissez SSH ouvrir / transférer toutes les connexions pour moi. C'est possible?
modifier
La réponse de womble est exactement ce que je cherchais, mais il semble que je ne puisse pas utiliser netcat pour le moment car il n'est pas installé sur le serveur de passerelle.
weppos:~ weppos$ ssh foo -vv
OpenSSH_5.1p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data /Users/xyz/.ssh/config
debug1: Applying options for foo
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh a nc -w 3 foo 22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/xyz/.ssh/identity type -1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_rsa type 1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_dsa type 2
bash: nc: command not found
ssh_exchange_identification: Connection closed by remote host
la source
Vous pouvez utiliser la directive ProxyCommand dans votre fichier ~ / .ssh / config, par exemple pour utiliser netcat comme relais:
Vous utiliseriez simplement 'ssh server2'. Les informations de page de manuel pour cette directive se trouvent dans 'man ssh_config'
la source
Je préfère une approche différente qui maintient un tunnel pré-authentifié vers le serveur de passerelle. Dans
~/.ssh/config
:Puis dans
.bashrc
:Donc, pour vous connecter à foo:
La première fois que vous vous connectez, il vous authentifiera contre "a" et ouvrira un tunnel ssh persistant et en arrière-plan. Les appels suivants à "s" s'ouvriront presque instantanément à travers le tunnel pré-authentifié.
Fonctionne très bien.
la source
Ce type de fonctionnalité existe dans les versions plus récentes d'OpenSSH et peut être utilisé en faisant
Où
server2
est votre destination prévue etserver1
votre hôte proxy. Vous pouvez rendre cela plus facile en utilisant l'ProxyCommand
option dans votre configuration ssh, quelque chose comme:la source
Lorsque
netcat
n'est pas disponible sur le proxy, essayez cette astuce:Vous devriez alors pouvoir
ssh foo
.De plus, si vous avez une version récente de ssh sur un (c'est-à-dire avec la
-W
commande de transfert d'entrée et de sortie standard), vous pourrez peut-être utiliser:Enfin, juste parce que je l'ai trouvé cool (et non pas parce que cela fonctionnera dans votre cas particulier, en raison des différences de nom d'utilisateur), le blog d'un ami montre comment rendre ce genre de chose dynamique et chaîner récursivement des proxys SSH (ainsi que certaines choses) qui ne fonctionnent pas bien):
Et puis
ssh machine1/machine2
devrait vous donner un obusmachine2
, tunnel à traversmachine1
.Je me demande si l'utilisation de
sed
commandes personnalisées au lieu dedirname
etbasename
pourrait ne pas résoudre le problème avec des noms d'utilisateur différents?la source
Cela peut être accompli en faisant
ssh -At johndoe@a ssh webby@foo
. La-A
commande transfère votre agent ssh (afin que vous puissiez éviter d'avoir à vous authentifier de nouveau sur le proxy), tandis que le-t
assure qu'un terminal existe sur le proxy. La fonction bash suivante peut être utile:la source
Netcat n'est pas installé sur
a
. Lorsque vous exécutezssh host "command arg"
,command
est exécuté surhost
, pas sur votre ordinateur local.la source
Depuis OpenSSH 7.3 (2016-08-01), l'
ProxyJump
option et l'-J
indicateur de ligne de commande correspondant sont disponibles pour permettre une indirection plus simple via un ou plusieurs bastions SSH ou «hôtes de saut».Cela supprime la dépendance à la
nc
commande externe telle que trouvée dans la solution de Womble .établira une connexion SSH de votre poste de travail au serveur de passerelle en
a
tant qu'utilisateur johndoe et créera un tunnel sur la session SSH pour héberger foo pour l'utilisateur Webby.Pour simplifier la création de définitions d'hôte pour votre
~/.ssh/config
et votre , vous pouvez simplement exécuterssh foo
la source