Ich verbinde mich ständig mit einer Reihe von Maschinen, von verschiedenen physischen Standorten (und damit von verschiedenen physischen Maschinen). Das meiste wird über ssh gemacht, manchmal sind ein oder zwei Gateway-Rechner erforderlich (die ich über ProxyCommand
in aufrufe ~/.ssh/config
). Ich möchte wissen, ob es eine Methode gibt, um die IP-Adresse oder den Hostnamen des Computers zu identifizieren, der die ursprüngliche Verbindung (dh den Computer, an dem ich arbeite) am Remote-Ende aufruft.
- Ich möchte keine Umgebungsvariablen senden, da auf einigen Computern kein Root festgelegt werden muss
PermitUserEnvironment
. - Die
$SSH_CLIENT
Umgebungsvariable ist nützlich für direkte Verbindungen, listet jedoch nur das aktuellste Gateway auf.
Meine aktuelle Idee für eine Lösung ist $SSH_CLIENT
es, den $SSH_CLIENT
Wert dieser Maschine zu ermitteln und zu wiederholen, bis er nicht mehr existiert. Nehmen Sie dann den Hostnamen und ziehen Sie ihn irgendwie zurück.
Scheint allerdings ein bisschen wie ein Hack-Job zu sein; Hat jemand eine bessere Methode?
Ich arbeite hauptsächlich in einer Bash-Shell, freue mich aber auch über Vorschläge, die diese nicht verwenden.
quelle
Antworten:
Ich habe es noch nie versucht, aber mir fällt etwas ein, das funktionieren könnte: Sie lassen SSH Ihre Login-Shell nicht starten, sondern nehmen die Angelegenheit selbst in die Hand. Sie können SSH anweisen, beliebige Befehle auszuführen. Anstatt von
Sie würden etwas in der Art von laufen
Dies gibt SSH etwas anderes zu tun, anstatt eine Login-Shell zu starten. Das ist eine Zeichenfolge, die remote als Befehl ausgeführt wird. Wir verwenden dies, um eine Shell auf eine ganz besondere Art und Weise zu starten: Wir geben ihr eine Umgebungsvariable
DAT_ORIGIN_HOST
, die unsere IP auf eth0 enthält (möglicherweise müssen Sie dies ändern).Der Trick, den wir ausführen, besteht darin, dass wir den Befehl zur Remote-Ausführung in doppelte Qouten setzen
"
. Die doppelten Anführungszeichen (zumindest in Bash) bedeuten, dass unsere Shell, bevor der String an SSH übergeben wird, ihn scannt und gegebenenfalls Erweiterungen / Ersetzungen durchführt. Dies bedeutet, dass unsere Shell den Teil `$ (ifconfig ...) an unsere aktuelle IP-Adresse auswertet und ssh eine Zeichenfolge übergibt, die die Definition für eine Umgebungsvariable mit unserer lokalen IP-Adresse enthält.Sobald Sie am Remote-Computer angemeldet sind,
echo $DAT_ORIGIN_HOST
sollten Sie Ihre IP-Adresse drucken.Um diesen Aufruf an SSH zu entwickeln, habe ich von hier aus schamlos die IP-Adresse extrahiert und hier das -t und wie man etwas Interaktives startet
Haftungsausschluss: Ich bin mir nicht sicher über die
-l
und-i
Option zu/bin/bash
. Vielleicht müssen Sie sie weglassen.quelle
Ich habe richtig verstanden, dass Sie mit
proxycommand
Hopfen direkt von der Ursprungsmaschine zum Ziel verbunden sind . Und so sind hier drei Hacks für Sie (dritter nach Kommentar zum Nutzungsszenario hinzugefügt). Erstens) Verwenden Sie die Remote-Port-Weiterleitung, damit Sie mit zu Ihrem Ursprungscomputer zurückkehren können-R remotemachineport:dstonlocalnet:dstportonlocalnet
Zweitens) Missbrauch
AcceptEnv LC_*
am Ziel. Es ist nicht schön, aber es ist durchaus üblich, LOCALE-Variablen zuzulassen, selbst wenn AcceptUserEnviconment nicht verfügbar ist. Jetzt können Sie also Folgendes tun:Drittens) Verwenden Sie ssh remote forward, um den Host oder den Hosttyp zu identifizieren.
Verbinden Sie sich jetzt mit der Portweiterleitung:
quelle
AcceptEnv LC_*
ist im Allgemeinen erlaubt, aber kein Standard, standardmäßig Einstellung?AcceptEnv
Direktive in aufgeführt ist/etc/ssh/sshd_config
. Denken Sie daran, neu zu starten,sshd
wenn diese Datei geändert wird.Sie können
who -m
auf der Remote-Seite eingeben, um Informationen zum aktuell angemeldeten Benutzer (einschließlich des Hostnamens) abzurufen.who
gibt Ihnen Informationen zu angemeldeten Benutzern und der-m
Schalter zeigt Ihnen "nur Hostname und Benutzer, die mit stdin verknüpft sind".quelle
Hast du folgendes versucht?
quelle