Question Borderline ServerFault, mais je programme des scripts shell, donc j'essaye ici d'abord :)
La plupart des * nix ont une commande qui vous permettra de rediriger / rediriger la sortie vers le presse-papiers / presse-papiers local et de la récupérer. Sous OS X, ces commandes sont
pbcopy, pbpaste
Est-il possible de répliquer cette fonctionnalité en SSH sur un autre serveur? C'est,
- J'utilise l'ordinateur A.
- J'ouvre une fenêtre de terminal
- Je SSH vers l'ordinateur B
- J'exécute une commande sur l'ordinateur B
- La sortie de l'ordinateur B est redirigée ou automatiquement copiée dans le presse-papiers de l'ordinateur A.
Et oui, je sais que je pourrais simplement (frissonner) utiliser ma souris pour sélectionner le texte de la commande, mais je me suis tellement habitué au flux de travail de pipping de la sortie directement dans le presse-papiers que je veux la même chose pour mes sessions à distance.
Le code est utile, mais les approches générales sont également appréciées.
:'<,'>w !ssh desktop pbcopy
-e none
drapeau ssh décrit ici: unix.stackexchange.com/questions/210615/…Ma manière préférée est
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Ceci est très utile lorsque vous ne voulez pas (ou ne pouvez pas) ssh de distant vers local.Edit: sur Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Edit: Un commentaire utile de nbren12:
la source
ssh [remote-machine] "cat log.txt" | pbcopy
cat
pour que cela fonctionne sur cygwin Windows 8:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard
(bien sûr, ma commande à distance ne l'était pascat
; c'était quelque chose d'autre à l'intérieur d'une machine virtuelle vagabonde, donc j'ai en fait couruvagrant ssh -c "command" | cat > /dev/clipboard
)RemoteForward 127.0.0.1:2222 127.0.0.1:22
à l'entrée des serveurs dans votre local.ssh/config
, puis exécutezssh -p 2222 127.0.0.1
sur la machine distante, qui redirigera alors la connexion vers la machine locale.Nous avons trouvé une excellente solution qui ne nécessite pas de connexion SSH inversée!
Vous pouvez utiliser xclip sur l'hôte distant, ainsi que le transfert ssh X11 et XQuartz sur le système OSX.
Pour configurer cela:
,
)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
la source
ssh remote-host "echo 'hello from remote-host' | pbcopy
? Ce serait une excellente réponse si cela fonctionnait quelque chose comme ceci:ssh -X remote-host
alors sur l'hôte distant:echo 'hello from remote-host' | xclip -selection clipboard
-X
pour le transfert X11 sur SSH, les programmes X11 pourront mettre à jour votre presse-papiers via les paramètres XQuartz ci-dessus. La commande ponctuelle est de démontrer que l'envoi de quelque chose viaecho
le presse-papiers de l'hôte distant viaxclip
fonctionne et doit se synchroniser avec votre hôte client SSH local. Notez comme @ gdw2 dit, "Le| xclip
est entre les guillemets doubles". En tant que tel, il s'exécutera en tant que commande sur le serveur distant pour envoyer quelque chose dans son presse-papiers.Port de tunnel inversé sur le serveur ssh
Toutes les solutions existantes nécessitent soit:
xclip
sur le serveur fonctionne très bien) ouVoici une autre façon de le faire, même si vous devrez modifier la façon dont vous vous connectez à votre ordinateur.
J'ai commencé à l'utiliser et c'est loin d'être aussi intimidant que ça en a l'air, alors essayez-le.
Client (démarrage de session ssh)
(indice: faites-en un raccourci clavier pour ne pas avoir à le taper)
Client (un autre onglet)
Remarque: si vous ne l'avez pas,
pbcopy
il suffit de letee
placer dans un fichier.Serveur (dans la session SSH)
Autres notes
En fait, même si vous êtes au milieu d'une session ssh, il existe un moyen de démarrer un tunnel, mais je ne veux pas effrayer les gens de ce qui n'est vraiment pas aussi mauvais qu'il y paraît. Mais j'ajouterai les détails plus tard si je vois un intérêt
la source
cat some_useful_content.txt | nc localhost 2000
commande semble se bloquer lorsque je fais cela. J'ai besoin de ctr-c manuellement pour l'arrêter, et ce n'estnc -l -p
fonctionne pour moi, mais nenc -l
fonctionne tout simplement pas. Et j'ai aussi le problème de @AlanStorm.-c
. J'utilise GNU netcat installé par brew.Il existe différents outils pour accéder aux sélections X11, y compris xclip et XSel . Notez que X11 a traditionnellement plusieurs sélections, et la plupart des programmes ont une certaine compréhension à la fois du presse-papiers et de la sélection principale (qui ne sont pas les mêmes). Emacs peut également travailler avec la sélection secondaire, mais c'est rare, et personne ne sait vraiment quoi faire avec les tampons coupés ...
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.la source
ssh -C -X user@remote-host
. Si l'exécution de xclip du côté distant ne semble pas fonctionner, assurez-vous qu'ilX11Forwarding yes
est défini dans le/etc/ssh/sshd_config
fichier distant . Assurezxauth
- vous également qu'il est installé du côté distant. Pour une machine sans tête, vous pouvez installerxauth
etxvfb
.xvfb
mention. J'utilisais un serveur headless, donc X11 ne devait pas fonctionner!C'est ma solution basée sur le tunnel inverse SSH, netcat et xclip.
Créez d'abord un script (par exemple, clipboard-daemon.sh) sur votre poste de travail:
et démarrez-le en arrière-plan.
Il démarrera la sortie de la tuyauterie nc vers xclip et le processus de réapparition après avoir reçu une partie des données
Ensuite, démarrez la connexion ssh à l'hôte distant:
Lorsque vous êtes connecté sur la boîte à distance, essayez ceci:
puis essayez de coller sur votre poste de travail
Vous pouvez bien sûr écrire un script wrapper qui démarre d'abord clipboard-daemon.sh puis ssh session. Voilà comment cela fonctionne pour moi. Prendre plaisir.
la source
Pas une seule ligne, mais ne nécessite aucun ssh supplémentaire .
netcat
si nécessairecat ~/some_file.txt | nc termbin.com 9999
. Cela copiera la sortie sur letermbin
site Web et imprimera l'URL sur votre sortie.Bien entendu, ne l'utilisez pas pour du contenu sensible.
la source
Cette réponse se développe à la fois sur la réponse choisie en ajoutant plus de sécurité.
Cette réponse a discuté de la forme générale
Lorsque la sécurité est peut manquer dans les
ssh
autorisations permettant<user B>
àhost B>
dessh
danshost A
et d' exécuter une commande.Bien sûr ,
B
d'A
accès peut déjà être fermée par unessh
clé, et il peut même avoir un mot de passe. Mais une autre couche de sécurité peut restreindre la portée des commandes autorisées sur lesquellesB
s'exécuterA
, par exemple,rm -rf /
ne peuvent pas être appelées. (Ceci est particulièrement important lorsque lassh
clé n'a pas de mot de passe.)Heureusement,
ssh
a une fonctionnalité intégrée appelée restriction de commande ou commande forcée . Voir ssh.com ou cette question serverfault.com .La solution ci-dessous montre la solution de formulaire générale avec la
ssh
restriction de commande appliquée.Exemple de solution avec restriction de commande ajoutée
Cette solution de sécurité renforcée suit la forme générale - l'appel à partir de la
ssh
sessionhost-B
est simplement:Le reste de ceci montre la configuration pour que cela fonctionne.
Configuration de la restriction de commande ssh
Supposons que le compte utilisateur sur
B
estuser-B
, et que B ait une clé sshid-clip
, qui a été créée de la manière habituelle (ssh-keygen
).Ensuite, dans
user-A
le répertoire ssh il y a un fichierqui reconnaît la clé
id-clip
et permet lassh
connexion.Habituellement, le contenu de chaque ligne
authorized_keys
est exactement la clé publique autorisée, par exemple le contenu deid-clip.pub
.Cependant, pour appliquer la restriction de commande, le contenu de la clé publique est ajouté (sur la même ligne) par la commande à exécuter.
Dans notre cas:
La commande désignée
"/home/user-A/.ssh/allowed-commands.sh id-clip"
, et seulement cette commande désignée, est exécutée chaque fois que la cléid-clip
est utilisée pour lancer unessh
connexion àhost-A
- quelle que soit la commande écrite sur lassh
ligne de commande .La commande indique un fichier de script
allowed-commands.sh
et le contenu de ce fichier de script estL'appel initial
ssh
sur la machineB
étaitLa chaîne
to-clipboard
est transmiseallowed-commands.sh
par la variable d'environnementSSH_ORIGINAL_COMMAND
. Ajout, nous avons passé le nom de la clé,, àid-clip
partir de la ligne dansauthorized_keys
laquelle on accède uniquement parid-clip
.La ligne
est juste une boîte de message contextuelle pour vous informer que le presse-papiers est en cours d'écriture - c'est probablement aussi une bonne fonctionnalité de sécurité. (
notify-send
fonctionne sur Ubuntu 18.04, peut-être pas sur d'autres).Dans la ligne
le paramètre
--display :0
est nécessaire car le processus n'a pas son propre affichage X avec un presse-papiers, il doit donc être spécifié explicitement. Cette valeur:0
fonctionne sur Ubuntu 18.04 avec le serveur de fenêtres Wayland. Sur d'autres configurations, cela peut ne pas fonctionner. Pour un serveur X standard, cette réponse peut aider.host-A
/etc/ssh/sshd_config
paramètresEnfin, quelques paramètres dans
/etc/ssh/sshd_config
sur l'hôteA
qui devraient être définis pour garantir l'autorisation de se connecter et l'autorisation d'utiliserssh
-key uniquement sans mot de passe:Pour que le
sshd
serveur relise la configurationou
conclusion
C'est un peu d'effort pour le configurer, mais d'autres fonctions
to-clipboard
peuvent être construites en parallèle dans le même cadre.la source
La solution @rhileighalmgren est bonne, mais pbcopy copiera ennuyeusement le dernier caractère "\ n", j'utilise "head" pour supprimer le dernier caractère pour éviter cela:
Ma solution complète est ici: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
la source
La solution la plus simple de toutes, si vous êtes sur OS X en utilisant Terminal et que vous avez ssh'ing sur un serveur distant et que vous souhaitez récupérer les résultats d'un fichier texte ou d'un journal ou d'un csv, simplement:
1)
Cmd-K
pour effacer la sortie du terminal2)
cat <filename>
pour afficher le contenu du fichier3)
Cmd-S
pour enregistrer la sortie du terminalVous devrez 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 d'autres packages à installer, des "tunnels inversés" et d'essayer d'avoir une adresse IP statique, etc.
la source
scp
!