web-dev-qa-db-fra.com

Copier l'entrée dans le presse-papier sur SSH?

Voici mon cas d'utilisation:

  • Je suis souvent connecté à d'autres ordinateurs sur SSH pour le travail et j'ai souvent besoin de copier et coller des documents/texte du serveur sur les éditeurs exécutant localement pour écrire des exemples et partager du texte.
  • Souvent, si le texte est assez petit, je vais simplement copier la sortie de mon programme terminal (gnome-terminal pour le moment) et la coller.
  • Cependant, lorsqu'il s'agit de documents entiers, mes options sont assez limitées. Je peux soit copier le document chunk-by-chunk, ou 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?

34
Naftuli Kay

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 -'`
7
geekosaur

Voici comment vous le feriez sur OSX de votre machine locale

ssh remotehost.com "<some/file.txt" | pbcopy
5
William Casarin

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
3
d.raev

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.

1
Jason R Stevens CFA

~/.ssh/config:

Host REMOTEHOST
    ...
    ForwardX11 yes

/ etc/ssh/sshd_config:

X11Forwarding yes

frapper:

$ xclip -o | ssh REMOTEHOST 'DISPLAY=:0 xclip -i'
1
superqwerty

Copie d'un serveur sans tête dans le presse-papiers local, de l'intérieur de votre session SSH habituelle:

  1. 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
    
  2. 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
    
  3. 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]
    
  4. 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.

0
tanius

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.

0
Vasyl