Comment faire pour envoyer des données de presse-papiers local à partir d'une distance de session SSH
Limite ServerFault question, mais je suis programmation certains scripts shell, donc j'essaye ici d'abord 🙂
Plus *nixes une commande qui vous permettra de tuyau/rediriger la sortie vers le presse-papiers local/table de montage, et de récupérer de même. Sur OS X, ces commandes sont
pbcopy, pbpaste
Est-il de toute façon à reproduire cette fonctionnalité alors que SSHed dans un autre serveur? C'est,
- Je suis à l'aide de l'Ordinateur A.
- - Je ouvrir une fenêtre de terminal
- Je SSH à l'Ordinateur B
- Je exécuter une commande sur l'Ordinateur B
- La sortie de l'Ordinateur B est redirigée ou automatiquement copiées sur Un Ordinateur du presse-papiers.
Et oui, je sais que je pourrais juste (frisson) utiliser ma souris pour sélectionner le texte à partir de la commande, mais je suis tellement habitué au flux de travail du bêchage sortie directement dans le presse-papiers que je veux le même pour mon sessions à distance.
Code est utile, mais en général les approches sont aussi bien appréciés.
Vous devez vous connecter pour publier un commentaire.
Je suis la résurrection de ce fil parce que j'ai été à la recherche pour le même genre de solution, et j'en ai trouvé un qui fonctionne pour moi. C'est une modification mineure à une suggestion de OSX Quotidien.
Dans mon cas, j'utilise le Terminal sur mon local OSX machine de se connecter à un serveur linux via SSH. Comme l'OP, je voulais être en mesure de transférer de petits morceaux de texte à partir de la borne de mon presse-papiers local, en utilisant uniquement le clavier.
L'essence de la solution:
Lorsque vous exécutez dans une session ssh sur un ordinateur distant, cette commande prend la sortie de commandThatMakesOutput (par exemple, ls, pwd) et les tuyaux à la sortie vers le presse-papiers de l'ordinateur local (le nom ou l'adresse IP de "bureau"). En d'autres termes, il utilise imbriqués ssh: vous êtes connecté à l'ordinateur distant via une session ssh, vous exécutez la commande, et l'ordinateur distant se connecte à votre ordinateur de bureau via une autre session ssh et met le texte dans le presse-papiers.
Il exige de votre bureau pour être configuré comme un serveur ssh (dont je vous laisse et google). Il est beaucoup plus facile si vous avez mis en place des clés ssh pour faciliter rapide ssh utilisation, de préférence à l'aide d'une session par session mot de passe, ou quels que soient vos besoins en matière de sécurité l'exigent.
D'autres exemples:
Pour des raisons de commodité, j'ai créé un fichier bash pour raccourcir le texte requis après la pipe:
Dans mon cas, je suis en utilisant un spécialement nommé clés
Je l'ai enregistré avec le nom de fichier cb (mon mnémonique (presse-papiers). Placez le script quelque part dans votre path, de le rendre exécutable et le tour est joué:
:'<,'>w !ssh desktop pbcopy
-e none
ssh drapeau décrit ici: unix.stackexchange.com/questions/210615/...commandThatMakesOutput | clip
(par exemple;ssh -t root@$host "cat /your/file" | clip
).| ssh desktop pbcopy
.Ma façon préférée est
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Ceci est particulièrement utile lorsque vous ne voulez pas (ou ne pouvez pas) ssh de distance locale.Edit: sur Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Edit: Un commentaire de nbren12:
ssh [remote-machine] "cat log.txt" | pbcopy
cat
pour obtenir que cela fonctionne sur cygwin Windows 8:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard
(bien sûr, ma commande à distance n'était pascat
; c'était quelque chose d'autre à l'intérieur d'un vagabond de la machine virtuelle et j'ai donc couruvagrant ssh -c "command" | cat > /dev/clipboard
)RemoteForward 127.0.0.1:2222 127.0.0.1:22
à l'entrée de serveurs dans vos locaux.ssh/config
, puis exécuterssh -p 2222 127.0.0.1
sur la machine distante, qui sera ensuite rediriger la connexion à l'ordinateur local.Trouvé une excellente solution qui ne nécessite pas une inversion de la connexion ssh!
Vous pouvez utiliser xclip sur l'hôte distant avec ssh X11 forwarding & XQuartz sur le système OSX.
De cette série:
,
)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
ssh remote-host "echo 'hello from remote-host' | pbcopy
? Ce serait une excellente réponse si il serait de travailler à quelque chose comme ceci:ssh -X remote-host
puis sur l'hôte distant:echo 'hello from remote-host' | xclip -selection clipboard
-X
pour X11 Forwarding avec SSH, X11 programmes seront en mesure de mettre à jour votre presse-papiers via le XQuartz paramètres ci-dessus. La commande est de démontrer que le fait d'envoyer quelque chose parecho
à l'hôte distant du presse-papiers viaxclip
ne travail & de synchronisation à votre client SSH hôte. Remarque que @gdw2 dit, "La| xclip
est à l'intérieur de guillemets doubles". En tant que tel, il va exécuter une commande sur le serveur distant pour envoyer quelque chose à la presse-papiers.Il existe plusieurs outils d'accès à X11 sélections, y compris xclip et XSel. Notez que X11 traditionnellement, les sélections multiples, et la plupart des programmes ont une certaine compréhension à la fois le presse-papiers et la sélection principale (qui ne sont pas les mêmes). Emacs peut travailler avec la sélection secondaire, mais c'est rare, et personne ne sait vraiment quoi faire avec la coupe tampons...
En bref, vous devriez essayer
xclip -i
/xclip -o
ouxclip -i -sel clip
/xclip -o -sel clip
ouxsel -i
/xsel -o
ouxsel -i -b
/xsel -o -b
, selon ce que vous voulez.ssh -C -X user@remote-host
. Si l'exécution de xclip sur le côté distant ne semble pas être un travail, assurez-vous queX11Forwarding yes
est situé dans la télécommande/etc/ssh/sshd_config
fichier. Assurez-vous égalementxauth
est installé sur le côté éloigné. Pour une tête de machine, vous pouvez installerxauth
etxvfb
.xvfb
mentionner. J'ai été l'exécution d'un serveur headless, donc X11 ne doit pas avoir été en cours d'exécution!Inverse tunnel de port du serveur ssh
Toutes les solutions existantes soit besoin:
xclip
sur le serveur fonctionne très bien) ouVoici une autre façon de le faire, si vous avez besoin de modifier la façon dont vous en ssh sur votre ordinateur.
J'ai commencé à utiliser cela et c'est nulle part près d'aussi intimidant que ça a l'air tellement lui donner un essai.
Client ssh (démarrage de la session)
(astuce: faire de cette un raccourci clavier afin de ne pas avoir à le taper)
Client (un autre onglet)
Remarque: si vous n'avez pas
pbcopy
puis justetee
dans un fichier.Serveur (à l'intérieur de la session SSH)
Autres notes
Effectivement, même si vous êtes au milieu d'une session ssh il y a une façon de commencer un tunnel mais je ne veux pas effrayer les gens à partir de ce qui n'est vraiment pas aussi terrible que ça en a l'air. Mais je vais ajouter les détails plus tard si je vois aucun intérêt
cat some_useful_content.txt | nc localhost 2000
commande semble se bloquer quand je fais cela. J'ai besoin d'manuellement ctr-c pour l'arrêter, et c'est seulement alors que le contenu est à mon client clip/cartonnc -l -p
fonctionne pour moi, mais justenc -l
ne le fait pas. Et j'ai le problème de @AlanStorm, trop.-c
. J'utilise GNU netcat installé par infusion.ssh <remote host_name> "cat <remote file_name_with_path>" | pbcopy
C'est ma solution basée sur SSH tunnel inverse, netcat et xclip.
D'abord créer un script (par exemple. clipboard-daemon.sh) sur votre poste de travail:
et le lancer en arrière-plan.
Il va commencer nc de la tuyauterie de sortie de xclip et de renaitre après la réception de la portion de données
Puis commencer ssh connexion à l'hôte distant:
Tout en étant connecté sur la télécommande de la boîte, essayez ceci:
essayez ensuite de coller sur votre poste de travail
Vous pouvez bien sûr écrire des script qui démarre clipboard-daemon.sh d'abord et ensuite de la session ssh. Voilà comment cela fonctionne pour moi. Profitez de.
Pas un one-liner, mais nécessite pas de supplément de ssh.
netcat
si nécessairecat ~/some_file.txt | nc termbin.com 9999
. Cela va copier la sortie de latermbin
site web et imprime l'URL de votre sortie.Bien sûr, ne l'utilisez pas pour le contenu sensible.
Cette réponse se développe à la fois sur le la réponse choisie en ajoutant plus de sécurité.
Que la réponse discuté de la forme générale
Où la sécurité peut être manque, c'est dans le
ssh
autorisations permettant<user B>
surhost B>
àssh
enhost A
et exécuter tout de commande.Bien sûr
B
àA
l'accès peut déjà être fermée par unssh
clé, et il peut même avoir un mot de passe. Mais une autre couche de sécurité peut restreindre la portée de commandes autorisées queB
pouvez exécuter surA
, par exemple, de sorte querm -rf /
ne peut pas être appelé. (Ceci est particulièrement important lorsque lessh
clé n'est pas avoir un mot de passe.)Heureusement,
ssh
a une fonctionnalité appelée restriction de commande ou forcé de commande. Voir ssh.com, oucette serverfault.com question.
La solution ci-dessous montre la forme générale de la solution avec
ssh
restriction de commande appliquée.Exemple de Solution avec restriction de commande ajouté
Cette amélioration de la sécurité, suit la forme générale - l'appel de la
ssh
session surhost-B
est tout simplement:Le reste de cette montre de la configuration pour obtenir que cela fonctionne.
Installation de commande ssh restriction
Supposons que le compte d'utilisateur sur
B
estuser-B
, et B a une clé sshid-clip
, qui a été créé de la manière habituelle (ssh-keygen
).Puis dans
user-A
s'ssh répertoire, il existe un fichierqui reconnaît la clé
id-clip
et permetssh
connexion.Généralement le contenu de chaque ligne
authorized_keys
est exactement la clé publique d'être autorisé, par exemple, le contenu deid-clip.pub
.Toutefois, pour appliquer restriction de commande la clé publique de contenu est ajouté (sur la même ligne) par la commande à exécuter.
Dans notre cas:
Désignés commande
"/home/user-A/.ssh/allowed-commands.sh id-clip"
, et seulement que la désignation de commande, est exécuté à chaque fois que la clé deid-clip
est utilisé lancer unessh
connexion àhost-A
- n'importe quelle commande est écrit de lassh
ligne de commande.La commande indique un fichier de script
allowed-commands.sh
, et le contenu de ce fichier de script estL'appel d'origine pour
ssh
sur la machineB
étaitLa chaîne
to-clipboard
est passé àallowed-commands.sh
par la variable d'environnementSSH_ORIGINAL_COMMAND
.Outre, nous avons adopté le nom de la clé,
id-clip
, à partir de la ligne dansauthorized_keys
qui est accessible uniquement par laid-clip
.La ligne
est juste une fenêtre messagebox pour vous permettre de connaître le presse-papiers est en cours d'écriture - c'est probablement une bonne fonctionnalité de sécurité de trop. (
notify-send
fonctionne sur Ubuntu 18.04, peut-être pas d'autres).Dans la ligne
le paramètre
--display :0
est nécessaire parce que le processus n'est pas de l'affichage X avec un presse-papiers,donc, il doit être specificied explicitement. Cette valeur
:0
arrive à travailler sur Ubuntu 18.04 avec Wayland fenêtre du serveur. Sur d'autres configurations, il peut ne pas fonctionner. Pour un serveur standard X cette réponse pourrait aider.host-A
/etc/ssh/sshd_config
paramètresEnfin un peu de paramètres dans
/etc/ssh/sshd_config
sur l'hôteA
qui doit être définie afin d'assurer la permission de se connecter, et la permission d'utiliserssh
-clé sans mot de passe:Pour faire de la
sshd
serveur de re-lire la configou
conclusion
C'est un peu d'effort pour le configurer, mais d'autres fonctions en dehors
to-clipboard
peut être construit en parallèle le même cadre.@rhileighalmgren solution est bonne, mais pbcopy sera fâcheusement copier le dernier "\n" caractère, j'utilise de la "tête" de supprimer le dernier caractère d'éviter cela:
Ma solution est ici : http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
La solution la plus simple de tous, si vous êtes sur OS X en utilisant le Terminal et vous avez été ssh avec autour dans un serveur distant et souhaitez saisir les résultats d'un fichier texte ou d'un journal ou d'un fichier csv, il suffit de:
1)
Cmd-K
pour désactiver la sortie du terminal2)
cat <filename>
pour afficher le contenu du fichier3)
Cmd-S
pour enregistrer la Sortie du TerminalVous devrez le supprimer manuellement la première ligne et la dernière ligne du fichier, mais cette méthode est un peu plus simple que de compter sur les autres paquets installés, "reverse tunnels" et en essayant d'avoir une adresse IP statique, etc.
scp
!