Hier ist die von mir bevorzugte Lösung für dieses Problem [wie sie auf einer doppelte Frage Ich fragte]. Richten Sie einen umgekehrten ssh-Tunnel ein, wenn Sie die ssh-Sitzung erstellen. Dies wird durch zwei Bash-Funktionen erleichtert: grabfrom() muss auf dem lokalen Rechner definiert werden, während grab() auf dem entfernten Rechner definiert werden sollte. Sie können alle anderen ssh-Variablen, die Sie verwenden (z. B. -X oder -Y), nach eigenem Ermessen hinzufügen.
function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
function grab() { scp -P 2202 $@ localuser@127.0.0.1:~; };
Verwendung:
localhost% grabfrom remoteuser@remotehost
password: <remote password goes here>
remotehost% grab somefile1 somefile2 *.txt
password: <local password goes here>
Positiv:
- Es funktioniert ohne spezielle Software auf beiden Hosts über OpenSSH hinaus
- Es funktioniert, wenn sich der lokale Host hinter einem NAT-Router befindet
- Sie kann als ein Paar von zwei einzeiligen Bash-Funktionen implementiert werden
Negativ:
- Es wird also eine feste Portnummer verwendet:
- funktioniert nicht bei mehreren Verbindungen zum entfernten Host
- mit einem Prozess in Konflikt geraten könnte, der diesen Anschluss auf dem entfernten Host verwendet
- Es erfordert, dass localhost ssh-Verbindungen akzeptiert
- Es erfordert einen speziellen Befehl zur Einleitung der Sitzung
- Es behandelt nicht implizit die Authentifizierung gegenüber dem localhost
- Es ist nicht möglich, das Zielverzeichnis auf localhost anzugeben
- Wenn Sie von mehreren lokalen Hosts auf denselben entfernten Host zugreifen, mag ssh es nicht, wenn sich die Schlüssel ändern
Künftige Arbeit: Dies ist noch ziemlich unausgereift. Offensichtlich wäre es möglich, das Authentifizierungsproblem zu lösen, indem man ssh-Schlüssel entsprechend einrichtet, und es ist noch einfacher, die Angabe eines entfernten Verzeichnisses zu erlauben, indem man einen Parameter zu grab() hinzufügt
Schwieriger ist es, die anderen negativen Aspekte anzusprechen. Es wäre schön, einen dynamischen Port zu wählen, aber soweit ich sagen kann, gibt es keinen eleganten Weg, diesen Port an die Shell auf dem entfernten Host zu übergeben; soweit ich sagen kann, erlaubt OpenSSH nicht, beliebige Umgebungsvariablen auf dem entfernten Host zu setzen, und die Bash kann keine Umgebungsvariablen aus einem Kommandozeilenargument übernehmen. Selbst wenn Sie einen dynamischen Port wählen könnten, gibt es keinen Weg, um sicherzustellen, dass er auf dem entfernten Rechner nicht benutzt wird, ohne dass Sie sich vorher verbinden.
0 Stimmen
Ich verstehe, Sie suchen etwas wie den alten sz-Befehl aus der Fido-Zeit. Mann, das bringt mich zurück.
0 Stimmen
Wenn Sie sich die Eingabe des zweiten Arguments von scp ersparen wollen, fragen Sie einfach nach einem Alias.