Voici mon cas d'utilisation:
scp
it to the machine locale.Existe-t-il un moyen d'utiliser un programme tel que xclip
qui me permettra de copier la télécommande stdin
sur le presse-papiers du serveur local X? Quelque chose à l'effet de:
cat myconffile.conf | sed {...} | copy-over-ssh-to-local-clipboard
serait génial. Est-ce que quelque chose existe pour rendre cela possible?
Si vous exécutez SSH avec X Transfert, ceci est transparent: les commandes distantes (y compris xclip
) ont accès à votre serveur X (y compris son clavier). Assurez-vous que vous avez ForwardX11 yes
dans ton ~/.ssh/config
et X11Forwarding yes
dans le serveur sshd_config
(selon vos distributions, ces options peuvent être activées ou désactivées par défaut).
<myconffile.conf sed {...} | xclip -i
Il existe d'autres moyens de travailler sur des fichiers distants qui peuvent être plus pratiques, par exemple montage des répertoires distants sur votre machine locale avec SSHFS ou ouvrant des fichiers distants dans EMACS avec Tramp . Si vous avez SSH et fusible Configuration et SSHFS installés, SSHFS est aussi simple que mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserver
. Si vous avez installé SSH et EMACS installé, le tramp est aussi simple que l'ouverture /myserver:/path/to/file
.
Vous n'avez besoin de rien de spécial; depuis xclip
fonctionne sur stdin
, juste
ssh remotehost xclip < myconf.conf
Pourquoi devriez-t-il être modifié avec sed
? ssh
est transparent aux données lorsqu'il n'est pas utilisé comme terminal, et est couramment utilisé dans des pipelines tels que
tar cfz - somedir | ssh remotehost 'cd destdir; tar xfz -'`
Voici comment vous le feriez sur OSX de votre machine locale
ssh remotehost.com "<some/file.txt" | pbcopy
si votre ordinateur local exécute Windows (7+), vous pouvez simplement l'utiliser à partir de la ligne de commande:
ssh user@server cat /home/user/file | clip
Très similaires aux solutions @ d-Raev et @ William-Casarin, cependant, c'est différent, alors je partage ce qui a fonctionné pour moi.
la commande
ssh user@Host "cat <myconffile.conf" | xclip -sel clip
explication
Ceci utilise ssh
pour créer un tunnel sécurisé, connectez-vous à user
_ Host
ou ip
, puis exécutez cat
pour imprimer le contenu. de <myconffile.conf
à stdout
puis passe-forme à la commande xclip -sel clip
sur votre machine locale, qui place le contenu de <myconffile.conf
Dans le Presse-papiers sur votre machine locale.
Exemple d'utilisation du monde réel
J'utilise cette structure de commande pour des tâches telles que Coller des touches SSH dans GitHub (permettant une simple sélection de Ctrl-V ou de pâte après avoir exécuté la commande) sur Bash sur Ubuntu 16.04 et 18.04. Vérifier man ssh
, man cat
, et man xclip
Pour les détails du comportement et des options.
~/.ssh/config:
Host REMOTEHOST
...
ForwardX11 yes
/ etc/ssh/sshd_config:
X11Forwarding yes
frapper:
$ xclip -o | ssh REMOTEHOST 'DISPLAY=:0 xclip -i'
Copie d'un serveur sans tête dans le presse-papiers local, de l'intérieur de votre session SSH habituelle:
Installez ncat
sur votre machine locale et distante. (Sur votre machine distante, vous pouvez également faire avec nc
ou uni telnet
, mais sur la machine locale, nous avons besoin des options pour exécuter des commandes (-c
/-e
) qui ne sont pas disponibles dans nc
dans des distributions habituelles telles que Debian et Ubuntu.)
apt install nmap
Sur votre ordinateur local, configurez un serveur à l'écoute de l'interface locale qui copiera le contenu entrant sur Port 10009 à votre x Presse-papiers:
ncat --keep-open --listen --sh-exec "xclip -selection clipboard" localhost 10009
Ou utilisez la version sténographique équivalente:
ncat -klc "xclip -sel c" localhost 10009
SSH dans la machine distante de telle sorte qu'un tunnel inverse soit établi à partir du port 10008 de la machine distante sur le port 10009 sur votre machine locale (où votre serveur est écouté). Vous pouvez utiliser cette session SSH pour votre travail normal.
ssh -R 10008:localhost:10009 [email protected]
Lorsque vous souhaitez copier le contenu d'un fichier de la machine distante dans le presse-papiers local, exécutez dans la coquille SSH:
ncat --send-only localhost 10008 < file.txt
Et bien sûr, cela est plus agréable lorsqu'il est emballé comme un raccourci ou un script shell. Nous pourrions appeler cela rclip
pour "[Copier sur] Presse-papiers distants" dans l'analogie sur le bien connu xclip
.
Avantages
Pas besoin d'ouvrir une autre session SSH sur la machine distante.
Pas besoin de xclip
sur la machine distante, de sorte que cela fonctionne si vous ne pouvez pas l'installer ou ne pouvez pas l'utiliser car c'est un serveur sans tête sans X.
Sécurité
Nous faisons ncat -l localhost 10009
Pour le serveur, ce qui signifie qu'il n'écoute que sur l'interface réseau avec l'adresse IP localhost
. Cette interface de boucle locale n'autorise que les connexions de votre propre machine (y compris, dans ce cas, ces tunnes inverse dans Via SSH). Donc, même si vous n'êtes pas derrière un pare-feu, votre port 10009 n'est exposé à personne sur Internet.
Source
Adapté de la gist Dergachev/ssh-forworward-clipboard.md Pour travailler pour Linux. Cet objectif contient également des instructions pour que le tunnel inverse inversé SSH une valeur par défaut.
J'ai un problème similaire avec lxterminal
(Terminaux testés différents) PLASTER PLASTER PLASTANT PLASTING À UNE SESSION ssh
. Si le presse-papier a plus d'environ 100 octets les délais d'attente de session et échouent.
Si je connecte via SSH à presque n'importe quel serveur Centos 5.x, puis connectez-vous au serveur cible, Coller Clipboard fonctionne sans aucun problème pour une taille de données raisonnable.