Wie zum senden von Daten an lokale Zwischenablage von einem remote-SSH-Sitzung
Borderline ServerFault Frage, aber ich bin Programmierung einigen shell-Skripten, also ich versuche es erstmal hier 🙂
Den meisten *Nixen haben einen Befehl, der Sie Rohr - /Ausgabe umleiten, um die lokale Zwischenablage/Pappe und abrufen von gleichen. Auf OS X diese Befehle sind
pbcopy, pbpaste
Ist es eh zu replizieren diese Funktionalität während SSHed in einem anderen server? Das ist,
- Ich bin mit Computer A.
- Ich öffnen Sie ein terminal-Fenster
- Ich SSH auf Rechner B
- Ich einen Befehl ausführen, der auf Computer B
- Den Ausgang Computer B umgeleitet werden, oder automatisch kopiert, um Computer-Zwischenablage.
Und ja, ich weiß, ich könnte nur (schaudern) meine Maus zu wählen Sie den text aus dem Befehl, aber ich habe mittlerweile so verwendet werden, um den workflow von pipping Ausgabe direkt in die Zwischenablage, dass ich will das gleiche für meine remote-Sitzungen.
Code ist nützlich, aber Allgemeine Ansätze sind geschätzt als gut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin Wiederbelebung dieses thread, da ich schon auf der Suche für die gleiche Art von Lösung, und ich habe eine gefunden, die funktioniert für mich. Es ist nur eine kleine änderung zu einem Vorschlag von OSX Täglich.
In meinem Fall, ich benutze Terminal auf meinem lokalen OSX Maschine eine Verbindung zu einem linux-server über SSH. Wie der OP, ich wollte in der Lage sein, kleine Textbausteine, von terminal zu meinem lokalen Zwischenablage, nur mit der Tastatur.
Die Essenz der Lösung:
Wenn die Ausführung in einer ssh-session zu einem remote-computer dieser Befehl nimmt die Ausgabe von commandThatMakesOutput (z.B. ls, pwd) und leitet die Ausgabe in die Zwischenablage des lokalen Computers (den Namen oder die IP des "desktop"). In anderen Worten, es verwendet geschachtelte ssh: Sie sind mit dem remote-computer über eine ssh-Sitzung, die Sie ausführen den Befehl gibt, und der remote-computer eine Verbindung zu Ihrem desktop durch einen anderen ssh-session und setzt den text in die Zwischenablage zu kopieren.
Erfordert es Ihrem desktop konfiguriert werden als ssh-server (die, die ich verlassen Sie und google). Es ist viel einfacher, wenn Sie eingerichtet haben, ssh-Schlüssel, um schnell zu erleichtern ssh-Nutzung, am besten mit einer pro-Sitzung-passphrase oder was auch immer Ihre Sicherheits-Bedürfnisse erfordern.
Andere Beispiele:
Für die Bequemlichkeit, ich habe eine bash-Datei zu verkürzen, wird der text nach dem pipe:
In meinem Fall, ich bin mit einem speziell benannten Schlüssel
Habe ich Sie gespeichert mit dem Datei-Namen cb (meine Eselsbrücke (Zwischenablage). Das Skript irgendwo in deinem Pfad ab, machen Sie es ausführbar und voila:
:'<,'>w !ssh desktop pbcopy
-e none
ssh flag beschrieben hier: unix.stackexchange.com/questions/210615/...commandThatMakesOutput | clip
(eg;ssh -t root@$host "cat /your/file" | clip
).| ssh desktop pbcopy
.Meine Lieblings-Weg ist
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Dies ist besonders nützlich, wenn Sie wollen nicht (oder können nicht) ssh von remote zu local.Edit: auf der Cygwin -
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Edit: Ein hilfreicher Kommentar von nbren12:
ssh [remote-machine] "cat log.txt" | pbcopy
cat
zu bekommen dies funktioniert auf cygwin Windows 8:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard
(natürlich meine remote-Befehl war nichtcat
; es war etwas anderes in eine vagrant-virtuelle Maschine, so dass ich tatsächlich liefvagrant ssh -c "command" | cat > /dev/clipboard
)RemoteForward 127.0.0.1:2222 127.0.0.1:22
auf den Server-Eintrag in der lokalen.ssh/config
, und führen Sie dannssh -p 2222 127.0.0.1
auf der remote-Maschine, die dann die Umleitung von verbindungen auf den lokalen Computer.Fand eine große Lösung, die nicht erforderlich, einen reverse-ssh-Verbindung!
Können Sie xclip auf dem remote-host, zusammen mit der ssh-X11-forwarding & XQuartz auf dem system OSX.
Diese eingerichtet:
,
)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
ssh remote-host "echo 'hello from remote-host' | pbcopy
? Dies wäre die perfekte Antwort, wenn es funktionieren würde, so etwas wie dieses:ssh -X remote-host
dann auf dem remote-host:echo 'hello from remote-host' | xclip -selection clipboard
-X
für X11-Forwarding über SSH, X11-Programme werden in der Lage sein, um aktualisieren Sie Ihre Zwischenablage über das XQuartz-Einstellungen vor. Der ein-aus-Befehl, um zu demonstrieren, dass das versenden etwas überecho
um die remote-host-Zwischenablage überxclip
funktioniert & sollten synchronisieren Sie Ihren lokalen SSH-client. Hinweis: als @gdw2 sagt, "Die| xclip
ist innerhalb der doppelten Anführungszeichen". Als solcher wird er ausführen als Befehl auf dem remote-server zu senden, was die Zwischenablage.Reverse-tunnel-port, auf dem ssh-server
Alle vorhandenen Lösungen müssen entweder:
xclip
auf dem server funktioniert Super) oderHier ist ein weiterer Weg, es zu tun, obwohl Sie brauchen werden, um zu ändern, wie Sie ssh in Ihrem computer.
Habe ich angefangen mit diesem und es ist bei weitem nicht so einschüchternd, wie es aussieht, so geben Sie es versuchen.
- Client (ssh-Sitzung starten)
(Tipp: machen Sie diese eine Tastenbelegung, so dass Sie nicht haben, geben Sie es)
Client (einem anderen tab)
Hinweis: wenn Sie nicht über
pbcopy
dann nurtee
es in eine Datei.Server (innerhalb der SSH-Sitzung)
Sonstige Hinweise
Tatsächlich, auch wenn Sie in der Mitte eine ssh-Sitzung zu starten, einen tunnel, aber ich will nicht zu erschrecken die Menschen Weg von dem, was wirklich gar nicht so schlimm, wie es aussieht. Aber ich werde die details später hinzufügen, wenn ich sehe, kein Interesse
cat some_useful_content.txt | nc localhost 2000
Befehl scheint zu hängen, wenn ich dies tun. Muss ich manuell Strg-c, um es zu stoppen, und es ist nur so, dass der Inhalt wird auf meinem client-clip/Pappenc -l -p
für mich funktioniert, aber nurnc -l
nicht. Und ich habe das problem, @AlanStorm, zu.-c
. Ich benutze GNU netcat installiert brauen.ssh <remote host_name> "cat <remote file_name_with_path>" | pbcopy
Gibt es verschiedene tools für den Zugriff auf die X11-Auswahl, einschließlich xclip und XSel. Beachten Sie, dass X11 traditionell hat mehrere Auswahl, und die meisten Programme haben einige Verständnis für die Zwischenablage und primäre Auswahl (das sind nicht die gleichen). Emacs kann die Arbeit mit den sekundären Auswahl auch, aber das ist selten, und niemand weiß wirklich, was zu tun ist mit cut-Puffer...
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.ssh -C -X user@remote-host
. Wenn mit xclip auf der remote-Seite nicht zu funktionieren scheint, stellen Sie sicher, dassX11Forwarding yes
ist in den entfernten/etc/ssh/sshd_config
- Datei. Stellen Sie außerdem sicherxauth
installiert ist auf der remote-Seite. Für einen headless-Rechner installieren möchten, können Siexauth
undxvfb
.xvfb
erwähnen. Ich lief ein headless-server, so dass X11 müssen nicht ausgeführt wurde!Dies ist meine Lösung, basierend auf SSH-reverse-tunnel, netcat und xclip.
Erste Skript erstellen (zB. clipboard-daemon.sh) auf Ihrer workstation:
und starten Sie es im hintergrund.
Wird es beginnen, nc Rohrleitungen Ausgabe xclip und respawnen Prozess nach Erhalt der Teil der Daten
Dann starten Sie ssh-Verbindung zum remote-host:
Während Sie eingeloggt sind, auf dem remote-box, versuchen Sie dies:
dann versuchen, fügen Sie auf Ihrer workstation
Können Sie natürlich schreiben, wrapper-Skript, das startet clipboard-daemon.sh und erst dann die ssh-Sitzung. Dies ist, wie es für mich funktioniert. Genießen.
Nicht einen one-liner, aber benötigt keine zusätzliche ssh -.
netcat
wenn nötigcat ~/some_file.txt | nc termbin.com 9999
. Dies wird kopieren Sie die Ausgabe dertermbin
website ein und gibt die URL zu Ihrem Ausgang.Natürlich, verwenden Sie es nicht für sensible Inhalte.
Dieser Antwort entwickelt sich sowohl auf dem gewählte Antwort durch hinzufügen von mehr Sicherheit.
Diese Antwort diskutiert die Allgemeine form
Wo Sicherheit fehlt, ist in der
ssh
Berechtigungen ermöglichen<user B>
aufhost B>
zussh
inhost A
und ausführen alle Befehl.Natürlich
B
zuA
Zugang kann schon sein, gated durch einssh
Schlüssel, und es kann auch ein Passwort haben. Aber eine andere Schicht Sicherheit beschränken Sie den Umfang der zulässigen Befehle, dieB
ausführen kann, aufA
z.B. so, dassrm -rf /
kann nicht aufgerufen werden. (Dies ist besonders wichtig, wenn diessh
Schlüssel nicht ein Passwort haben.)Glücklicherweise
ssh
hat eine eingebaute Funktion namens " Befehl Beschränkung oder gezwungen Befehl. Sehen ssh.com, oderdiese serverfault.com Frage.
Die Lösung unten zeigt die Allgemeine form der Lösung zusammen mit
ssh
Befehl Beschränkung durchgesetzt.B. Lösung mit Befehl Beschränkung Hinzugefügt
Diese security enhanced Lösung folgt der Allgemeinen form - der Anruf von der
ssh
Sitzung aufhost-B
ist einfach:Den rest dieses zeigt das setup, um das zu bekommen, zu arbeiten.
Setup von ssh-Befehl Beschränkung
Angenommen, der Benutzer-account auf
B
istuser-B
und B hat einen ssh-keyid-clip
,, wurde in der üblichen Weise (ssh-keygen
).Dann in
user-A
's ssh-Verzeichnis gibt es eine Dateierkennt, dass der Schlüssel
id-clip
und ermöglichtssh
Verbindung.In der Regel den Inhalt jeder Zeile
authorized_keys
ist genau der öffentliche Schlüssel autorisiert, z.B., den Inhaltid-clip.pub
.Jedoch durchsetzen Befehl Beschränkung, dass public-key-Inhalt vorangestellt (auf derselben Zeile), die von dem Befehl ausgeführt werden soll.
In unserem Fall:
Den benannten Befehl
"/home/user-A/.ssh/allowed-commands.sh id-clip"
, und nur, dass die benannten Befehl, wird ausgeführt, wenn der Schlüsselid-clip
verwendet wird, initiieren Sie einessh
Verbindung zuhost-A
- egal welchen Befehl geschrieben istssh
Befehlszeile.Dem Befehl zeigt an, eine script-Datei
allowed-commands.sh
, und der Inhalt der Skript-Datei istDer ursprüngliche Aufruf
ssh
auf der MaschineB
warDen string
to-clipboard
übergebenallowed-commands.sh
durch die UmgebungsvariableSSH_ORIGINAL_COMMAND
.Wir haben dazu übergeben Sie den Namen der Taste,
id-clip
von der Linie inauthorized_keys
die nur zugegriffenid-clip
.Die Linie
ist nur eine popup-Meldung informiert Sie über die Zwischenablage geschrieben wird - das ist wohl eine gute Sicherheits-Funktion zu. (
notify-send
funktioniert auf Ubuntu 18.04, vielleicht andere nicht).In der Zeile
den parameter
--display :0
ist notwendig, da der Prozess nicht über einen eigenen X-display mit einer Zwischenablage,so muss es sein specificied ausdrücklich. Dieser Wert
:0
passiert, arbeiten auf Ubuntu 18.04 mit Wayland Fenster server. Auf anderen setups dürfte es nicht funktionieren. Für eine standard-X-server diese Antwort helfen könnte.host-A
/etc/ssh/sshd_config
ParameterEndlich ein paar Parameter in
/etc/ssh/sshd_config
auf hostA
sollten festgelegt werden, damit die Berechtigung für die Verbindung, und die Erlaubnis zu verwendenssh
-Schlüssel nur ohne Passwort:Machen die
sshd
server erneuten Lesen der configoder
Fazit
Es einige Mühe, um es einzurichten, aber auch andere Funktionen außer der
to-clipboard
konstruiert werden können, die parallel den gleichen Rahmen.@rhileighalmgren Lösung ist gut, aber pbcopy wird ärgerlicherweise Kopie der letzten "\n" - Zeichen, ich verwende "head" - Streifen aus dem letzten Zeichen, das zu verhindern:
Voll meine Lösung ist hier : http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
Ist die einfachste Lösung von allen, wenn du auf OS X mit Terminal und Sie habe ssh ' Ing um auf einen remote-server und wollen, schnappen Sie sich die Ergebnisse einer text-Datei oder ein Protokoll oder eine csv -, einfach:
1)
Cmd-K
deaktivieren Sie die Ausgabe des Terminals2)
cat <filename>
zeigt den Inhalt der Datei3)
Cmd-S
zum speichern der Terminal-AusgabeMüssen Sie manuell entfernen Sie die erste Zeile und Letzte Zeile der Datei, aber diese Methode ist etwas einfacher, als sich auf andere Pakete installiert werden, "reverse Tunnel" und versuchen, eine statische IP, etc.
scp
!