Borderline ServerFault-Frage, aber ich programmiere einige Shell-Skripte, also versuche ich es zuerst hier :)
Die meisten * nixes verfügen über einen Befehl, mit dem Sie die Ausgabe in die lokale Zwischenablage / Pasteboard leiten und von dort abrufen können. Unter OS X sind diese Befehle
pbcopy, pbpaste
Gibt es überhaupt eine Möglichkeit, diese Funktionalität zu replizieren, während SSH auf einen anderen Server übertragen wird? Das ist,
- Ich benutze Computer A.
- Ich öffne ein Terminalfenster
- Ich SSH zu Computer B.
- Ich führe einen Befehl auf Computer B aus
- Die Ausgabe von Computer B wird umgeleitet oder automatisch in die Zwischenablage von Computer A kopiert.
Und ja, ich weiß, ich könnte einfach (schaudern) meine Maus verwenden, um den Text aus dem Befehl auszuwählen, aber ich habe mich so an den Workflow gewöhnt, die Ausgabe direkt in die Zwischenablage zu kopieren, dass ich dasselbe für meine Remote-Sitzungen möchte.
Code ist nützlich, aber auch allgemeine Ansätze werden geschätzt.
:'<,'>w !ssh desktop pbcopy
-e none
hier beschriebene SSH-Mein Lieblingsweg ist
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Dies ist am nützlichsten, wenn Sie nicht von remote nach lokal ssh möchten (oder können).Edit: auf Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Edit: Ein hilfreicher Kommentar von nbren12:
quelle
ssh [remote-machine] "cat log.txt" | pbcopy
cat
, um dies unter Cygwin Windows 8 zum Laufen zu bringen:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard
(Natürlich war mein Remote-Befehl nichtcat
; es war etwas anderes in einer vagabundierenden virtuellen Maschine, also lief ich tatsächlichvagrant ssh -c "command" | cat > /dev/clipboard
)RemoteForward 127.0.0.1:2222 127.0.0.1:22
den Servereintrag in Ihrem lokalen Computer hinzu.ssh/config
und führen Sie ihnssh -p 2222 127.0.0.1
auf dem Remotecomputer aus, der dann die Verbindung zum lokalen Computer umleitet.Ich habe eine großartige Lösung gefunden, die keine umgekehrte SSH-Verbindung erfordert!
Sie können xclip auf dem Remote-Host zusammen mit ssh X11 Forwarding und XQuartz auf dem OSX-System verwenden.
So richten Sie dies ein:
,
).ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
quelle
ssh remote-host "echo 'hello from remote-host' | pbcopy
? Dies wäre eine ausgezeichnete Antwort, wenn es so etwas funktionieren würde:ssh -X remote-host
dann auf dem Remote-Host:echo 'hello from remote-host' | xclip -selection clipboard
-X
für die X11-Weiterleitung über SSH verwenden, können X11-Programme Ihre Zwischenablage über die obigen XQuartz-Einstellungen aktualisieren. Der einmalige Befehl soll zeigen, dass das Senden von etwas überecho
die Zwischenablage des Remote-Hosts überxclip
funktioniert und mit Ihrem lokalen SSH-Client-Host synchronisiert werden sollte. Beachten Sie, wie @ gdw2 sagt: "Das| xclip
steht in doppelten Anführungszeichen". Als solches wird es als Befehl auf dem Remote-Server ausgeführt, um etwas an die Zwischenablage zu senden.Reverse Tunnel Port auf SSH Server
Alle vorhandenen Lösungen benötigen entweder:
xclip
auf dem Server funktioniert gut) oderHier ist eine andere Möglichkeit, obwohl Sie ändern müssen, wie Sie ssh in Ihren Computer.
Ich habe damit angefangen und es ist bei weitem nicht so einschüchternd, wie es aussieht. Probieren Sie es aus.
Client (Start der SSH-Sitzung)
(Hinweis: Machen Sie dies zu einer Tastenkombination, damit Sie sie nicht eingeben müssen.)
Client (eine andere Registerkarte)
Hinweis: Wenn Sie nicht haben
pbcopy
dann nurtee
in eine Datei.Server (innerhalb der SSH-Sitzung)
Weitere Hinweise
Selbst wenn Sie sich mitten in einer SSH-Sitzung befinden, gibt es eine Möglichkeit, einen Tunnel zu starten, aber ich möchte die Leute nicht von dem abhalten, was wirklich nicht so schlimm ist, wie es aussieht. Aber ich werde die Details später hinzufügen, wenn ich Interesse sehe
quelle
cat some_useful_content.txt | nc localhost 2000
scheint der Befehl zu hängen, wenn ich das tue. Ich muss manuell Strg-C drücken, um es zu stoppen, und erst dann gelangt der Inhalt zu meinem Client-Clip / Pasteboardnc -l -p
funktioniert bei mir,nc -l
tut es aber einfach nicht. Und ich habe auch das Problem von @AlanStorm.-c
. Ich verwende GNU Netcat, das von Brew installiert wurde.Es gibt verschiedene Tools für den Zugriff auf X11-Auswahlen, einschließlich xclip und XSel . Beachten Sie, dass X11 traditionell über mehrere Auswahlmöglichkeiten verfügt und die meisten Programme sowohl die Zwischenablage als auch die primäre Auswahl (die nicht identisch sind) verstehen. Emacs können auch mit der sekundären Auswahl arbeiten, aber das ist selten und niemand weiß wirklich, was mit geschnittenen Puffern zu tun ist ...
Kurz gesagt, Sie sollten versuchen,
xclip -i
/xclip -o
oderxclip -i -sel clip
/xclip -o -sel clip
oderxsel -i
/xsel -o
oderxsel -i -b
/xsel -o -b
, je nachdem, was Sie wollen.quelle
ssh -C -X user@remote-host
. Wenn das Ausführen von xclip auf der Remote-Seite nicht funktioniert, stellen Sie sicher, dassX11Forwarding yes
es in der Remote-/etc/ssh/sshd_config
Datei festgelegt ist. Stellen Sie außerdem sicher, dassxauth
es auf der Remote-Seite installiert ist. Für eine kopflose Maschine können Siexauth
und installierenxvfb
.xvfb
Erwähnung. Ich habe einen Headless-Server ausgeführt, also muss X11 nicht ausgeführt worden sein!Dies ist meine Lösung basierend auf SSH Reverse Tunnel, Netcat und Xclip.
Erstellen Sie zuerst ein Skript (z. B. clipboard-daemon.sh) auf Ihrer Workstation:
und starten Sie es im Hintergrund.
Nach dem Empfang eines Teils der Daten wird die nc-Piping-Ausgabe an xclip und den Respawning-Prozess gestartet
Starten Sie dann die SSH-Verbindung zum Remote-Host:
Versuchen Sie Folgendes, während Sie auf der Remote-Box angemeldet sind:
Versuchen Sie dann, auf Ihrer Workstation einzufügen
Sie können natürlich ein Wrapper-Skript schreiben, das zuerst clipboard-daemon.sh und dann ssh session startet. So funktioniert es bei mir. Genießen.
quelle
Kein Einzeiler, erfordert aber kein zusätzliches SSH .
netcat
bei Bedarf installierencat ~/some_file.txt | nc termbin.com 9999
. Dadurch wird die Ausgabe auf dietermbin
Website kopiert und die URL zu Ihrer Ausgabe gedruckt.Verwenden Sie es natürlich nicht für sensible Inhalte.
quelle
Diese Antwort entwickelt sich sowohl nach der gewählten Antwort, indem mehr Sicherheit hinzugefügt wird.
Diese Antwort erörterte die allgemeine Form
Wo Sicherheit fehlt werden kann , ist in den
ssh
Berechtigungen ermöglichen<user B>
aufhost B>
bisssh
zuhost A
und führen jeden Befehl.Natürlich kann
B
derA
Zugriff bereits über einenssh
Schlüssel erfolgen, und es kann sogar ein Passwort vorhanden sein. Eine andere Sicherheitsebene kann jedoch den Umfang der zulässigen Befehle einschränken, die ausgeführt werdenB
könnenA
, z. B. so, dassrm -rf /
sie nicht aufgerufen werden können. (Dies ist besonders wichtig, wenn derssh
Schlüssel kein Passwort hat.)Glücklicherweise verfügt es
ssh
über eine integrierte Funktion, die als Befehlsbeschränkung oder erzwungener Befehl bezeichnet wird . Siehe ssh.com oder diese serverfault.com-Frage .Die folgende Lösung zeigt die allgemeine Formularlösung zusammen mit der
ssh
Befehlsbeschränkung erzwungenen .Beispiellösung mit Befehlsbeschränkung hinzugefügter
Diese sicherheitsverbesserte Lösung folgt der allgemeinen Form - der Aufruf ab der
ssh
Sitzunghost-B
lautet einfach:Der Rest zeigt das Setup, damit das funktioniert.
Einrichtung der ssh-Befehlsbeschränkung
Angenommen, das Benutzerkonto
B
istuser-B
aktiviert und B verfügt über einen SSH-Schlüsselid-clip
, der auf die übliche Weise erstellt wurde (ssh-keygen
).Dann gibt es im
user-A
SSH-Verzeichnis eine Dateidas erkennt den Schlüssel
id-clip
und ermöglicht diessh
Verbindung.Normalerweise ist der Inhalt jeder Zeile
authorized_keys
genau der öffentliche Schlüssel, der autorisiert wird, z. B. der Inhalt vonid-clip.pub
.Um jedoch die Befehlsbeschränkung zu erzwingen, wird dem auszuführenden Befehl der Inhalt des öffentlichen Schlüssels (in derselben Zeile) vorangestellt.
In unserem Fall:
Der angegebene Befehl
"/home/user-A/.ssh/allowed-commands.sh id-clip"
und nur dieser festgelegte Befehl wird immer dann ausgeführt, wenn mit dem Schlüsselid-clip
einessh
Verbindung hergestellt wirdhost-A
- unabhängig davon, welcher Befehl in derssh
Befehlszeile geschrieben ist .Der Befehl gibt eine Skriptdatei
allowed-commands.sh
und den Inhalt dieser Skriptdatei anDer ursprüngliche Anruf
ssh
an der MaschineB
warDie Zeichenfolge
to-clipboard
wirdallowed-commands.sh
von der Umgebungsvariablen übergebenSSH_ORIGINAL_COMMAND
. Außerdem haben wir den Namen des Schlüsselsid-clip
aus der Zeile übergeben, inauthorized_keys
der nur von zugegriffen wirdid-clip
.Die Linie
ist nur eine Popup-Meldungsbox, die Sie darüber informiert, dass die Zwischenablage geschrieben wird - das ist wahrscheinlich auch eine gute Sicherheitsfunktion. (
notify-send
funktioniert unter Ubuntu 18.04, vielleicht nicht unter anderen).In der Schlange
Der Parameter
--display :0
ist erforderlich, da der Prozess keine eigene X-Anzeige mit einer Zwischenablage hat und daher explizit angegeben werden muss. Dieser Wert:0
funktioniert unter Ubuntu 18.04 mit Wayland Windows Server. Bei anderen Setups funktioniert es möglicherweise nicht. Bei einem Standard-X-Server kann diese Antwort hilfreich sein.host-A
/etc/ssh/sshd_config
ParameterZum Schluss noch ein paar Parameter
/etc/ssh/sshd_config
auf dem HostA
, die festgelegt werden sollten, um die Berechtigung zumssh
Herstellen einer Verbindung und die Berechtigung zum Verwenden von -key nur ohne Kennwort sicherzustellen:Damit der
sshd
Server die Konfiguration erneut liestoder
Fazit
Es ist ein gewisser Aufwand, es einzurichten, aber andere Funktionen
to-clipboard
können parallel zum selben Framework erstellt werden.quelle
@rhileighalmgren Lösung ist gut, aber pbcopy kopiert nervig das letzte "\ n" Zeichen. Ich benutze "Kopf", um das letzte Zeichen zu entfernen, um dies zu verhindern:
Meine vollständige Lösung finden Sie hier: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
quelle
Die einfachste Lösung von allen, wenn Sie unter OS X mit Terminal arbeiten und auf einem Remote-Server herumgespielt haben und die Ergebnisse einer Textdatei, eines Protokolls oder einer CSV abrufen möchten, einfach:
1)
Cmd-K
um den Ausgang des Terminals zu löschen2)
cat <filename>
um den Inhalt der Datei anzuzeigen3)
Cmd-S
um den Terminalausgang zu speichernSie müssen die erste und letzte Zeile der Datei manuell entfernen, aber diese Methode ist etwas einfacher, als sich auf andere zu installierende Pakete, "Reverse Tunnels" und den Versuch einer statischen IP usw. zu verlassen.
quelle
scp
!