Je me connecte à un certain nombre de machines en permanence, à partir de différents emplacements physiques (et donc de différentes machines physiques). La plupart de cela se fait via ssh, parfois une machine passerelle ou deux est requise (que j'invoque via ProxyCommand
in ~/.ssh/config
). Je voudrais savoir s'il existe une méthode pour identifier l'adresse IP ou le nom d'hôte de la machine qui appelle la connexion initiale (c'est-à-dire la machine sur laquelle je travaille) à l'extrémité distante?
- Je ne veux pas envoyer de variables d'environnement car certaines machines que je n'ai pas de racine à définir
PermitUserEnvironment
. - La
$SSH_CLIENT
variable d'environnement est utile pour les connexions directes, mais répertorie uniquement la passerelle la plus récente.
Mon idée actuelle pour une solution est de saisir $SSH_CLIENT
, ssh, de trouver la $SSH_CLIENT
valeur de cette machine et de répéter jusqu'à ce qu'elle n'existe pas; puis saisissez le nom d'hôte et retirez-le d'une manière ou d'une autre.
Cela semble être un peu un travail de piratage cependant; Quelqu'un at-il une meilleure méthode?
Je travaille principalement dans un shell bash, mais je suis également heureux de toute suggestion qui ne l'utilise pas trop.
la source
Réponses:
Je n'ai jamais essayé, mais je peux penser à quelque chose qui pourrait fonctionner: vous ne laissez pas SSH démarrer votre shell de connexion, mais prenez les choses en main. Vous pouvez dire à SSH d'exécuter des commandes arbitraires. Au lieu de
vous exécuteriez quelque chose le long des lignes de
Ce que cela signifie, c'est qu'il donne à SSH autre chose à faire au lieu de lancer un shell de connexion. Ce quelque chose est une chaîne, qui sera exécutée comme commande, à distance. Nous l'utilisons pour lancer un shell d'une manière très spéciale: nous lui donnons une variable d'environnement
DAT_ORIGIN_HOST
, qui contient notre ip sur eth0 (vous devrez peut-être changer cela).L'astuce que nous effectuons est que nous mettons la commande à exécuter à distance en double qoutes
"
. Les guillemets doubles (au moins dans Bash) signifient que AVANT QUE LA CHAÎNE EST PASSÉE À SSH, notre shell le scanne et effectue des extensions / remplacements, le cas échéant. Cela signifie que notre shell évaluera la partie `$ (ifconfig ...), à notre adresse IP actuelle et transmettra à ssh une chaîne qui contient la définition d'une variable d'environnement avec notre adresse IP locale.Une fois connecté à la machine distante,
echo $DAT_ORIGIN_HOST
vous devez imprimer votre adresse IP.Pour développer cet appel à SSH, j'ai sans vergogne pris d' ici pour extraire l'adresse IP et ici pour le -t et comment lancer quelque chose d'interactif
Avis de non-responsabilité: Je ne suis pas sûr de l' option
-l
et de l'-i
option/bin/bash
. Vous devrez peut-être les omettre.la source
Id J'ai bien compris que vous vous connectez directement de la machine d'origine à la destination avec des
proxycommand
sauts. Et voici donc trois hacks pour vous (troisième ajouté après le commentaire sur le scénario d'utilisation). Premièrement) Utilisez la redirection de port à distance pour vous permettre de revenir à votre machine d'origine avec-R remotemachineport:dstonlocalnet:dstportonlocalnet
Deuxièmement) Abus
AcceptEnv LC_*
sur la cible. Ce n'est pas agréable, mais il est assez courant d'autoriser les variables LOCALE même si AcceptUserEnviconment n'est pas disponible. Alors maintenant, vous pouvez faire:Troisièmement) Utilisez ssh remote forward pour identifier l'hôte ou le type d'hôte.
Connectez-vous maintenant avec la redirection de port:
la source
AcceptEnv LC_*
est généralement autorisé, mais pas standard.AcceptEnv
directive de/etc/ssh/sshd_config
. N'oubliez pas de redémarrersshd
si ce fichier est modifié.Vous pouvez taper
who -m
sur l'extrémité distante pour obtenir des informations sur l'utilisateur actuellement connecté (y compris le nom d'hôte).who
vous donne des informations sur les utilisateurs connectés, et le-m
commutateur vous montre "uniquement le nom d'hôte et l'utilisateur associé à stdin".la source
avez-vous essayé ce qui suit?
la source