À l'aide de iTerm2, je démarre une session SSH interactive sur une machine Linux distante (où elle pbcopy
n'est pas disponible). Sur la machine Linux distante, j'aimerais capturer la sortie d'une commande quelconque (par exemple ls *.foo
) et la faire apparaître comme par magie dans mon presse-papiers OSX, de sorte que lorsque je frappe ⌘+, vil apparaisse dans l'application OSX dans laquelle je viens de coller. Est-ce possible? J'ai essayé les codes d'échappement mentionnés sur la page iTerm2 doc et je ne peux pas les faire fonctionner.
macos
copy-paste
iterm
Joe Casadonte
la source
la source
Réponses:
Solution
Rassemblant de nombreuses informations provenant de plusieurs sources différentes, voici ce que j'ai proposé.
Démon local
À partir de l'ordinateur local (OSX), configurez un démon pour qu'il écoute sur un port spécifique, via
launchd
(voir les liens ci-dessous). Le processus démon appellera simplementpbcopy
, ce qui prendra tout ce qui est passé dansSTDIN
et le mettra dans le presse-papiers. Pour ce faire, vous devez configurer unlaunchd
fichier plist. Le mien ressemblait à ceci:Par convention, le nom du fichier plist devrait être le nom de l'étiquette avec le nom
.plist
ajouté, donc pour l'exemple ci-dessus, ce le seraitlocal.pbcopy.9999.plist
. Si vous souhaitez utiliser un port autre que 9999, il suffit de le changer partout (en gardant à l'esprit qu'il doit être supérieur à 1024 et ne pas être un port bien connu que vous utilisez peut-être déjà). Une fois que vous avez des choses à travailler, vous pouvez supprimer lesStandardOutPath
et lesStandardErrorPath
clés et les chaînes, car ils sont seulement nécessaires pour le débogage.Pour charger le démon, exécutez la commande suivante:
Vous pouvez voir qu'il est chargé ou le supprimer à l'aide des commandes suivantes:
Si vous souhaitez que cela se charge à chaque fois que vous vous connectez, placez le fichier plist dans le
~/Library/LaunchAgents
répertoire.Remarque: vous devrez configurer ceci sur chaque hôte local sur lequel vous souhaitez que cela fonctionne.
SSH Port-Forwarding
Étant donné que je pourrais accéder à la machine distante à partir de plusieurs ordinateurs locaux différents, je ne peux pas coder en dur l'envoi des données sur la machine distante à un hôte spécifique. Pour rendre cela aussi indolore et dynamique que possible, j'ai utilisé le transfert de port SSH pour créer un lien dynamique entre la machine distante et l'ordinateur local (le comment et le pourquoi de ceci sont au-delà de cette réponse; voir ci-dessous pour plus d'informations) . Plus précisément, je crée un lien entre le port 9997 de la machine distante et le port 9999 de l'ordinateur local, sur lequel un démon écoute, grâce aux
launchd
éléments ci-dessus. Je pourrais utiliser le port 9999 sur la machine distante et sur l'ordinateur local, mais ce n'est pas nécessaire.Pour configurer ce tunnel, exécutez la commande suivante:
Vous pouvez effectuer la commande à distance sur plusieurs machines distantes différentes avec la même commande et tout fonctionnera comme prévu. Vous pouvez effectuer plusieurs fois la télécommande sur le même ordinateur distant avec la même commande et cela fonctionnera comme prévu. voir note ci-dessous.
Si vous ne souhaitez pas saisir le caractère
-R 9997:localhost:9999
à chaque appel SSH, vous pouvez insérer la définition de transfert à distance dans le fichier de configuration SSH pour le faire automatiquement. Voici un exemple de mon~/.ssh/config
dossier:Avec cela, chaque fois que je SSH à un hôte dont le nom commence par 'ufo', la transmission à distance de 9997 à localhost: 9999 sera automatiquement configurée. Voir le lien de la page de manuel du fichier de configuration ci-dessous pour plus d'options.
Envoi de données
Sur le
netcat
serveur distant, je renvoie le contenu souhaité au démon d’écoute.Vous pouvez devenir aussi compliqué que vous le souhaitez:
Vous pouvez même décider de manière dynamique d'envoyer ou non des données, en fonction du fait que quelqu'un écoute ou non (il existe probablement un moyen plus efficace de le faire, mais cela fonctionne):
Observations et mises en garde
Choses que j'ai notées:
pbcopy
joue bien avec Copy'em PasteLiens de référence
la source
nc
sur votre hôte distant, cela fonctionne - au moins sur RHEL:echo "howdy" > /dev/tcp/localhost/9997
Remote pbcopy pour iTerm2 semble être un logiciel spécialement conçu pour résoudre ce problème.
la source
Tu peux le faire
la source