linux - sesiones - manual ssh
Cómo enviar datos al portapapeles local desde una sesión remota de SSH (9)
Agregue un puerto de túnel inverso en su servidor
Todas las soluciones existentes necesitan:
- X11 (si lo tiene,
xclip
funciona bien) o - el cliente y el servidor deben estar en la misma red (que no es el caso si estás en el trabajo tratando de acceder a la computadora de tu casa).
Aquí hay otra forma de hacerlo, aunque tendrá que modificar la forma en que ingresa a su computadora.
Empecé a usar esto y no es tan intimidante como parece, así que pruébalo.
Cliente (inicio de la sesión ssh)
ssh [email protected] -R 2000:localhost:2000
(sugerencia: conviértalo en un enlace para que no tengas que escribirlo)
Cliente (otra pestaña)
nc -l 2000 | pbcopy
Nota: si no tiene pbcopy
, simplemente pbcopy
a un archivo.
Servidor (dentro de la sesión SSH)
cat some_useful_content.txt | nc localhost 2000
Otras notas
Si estás en el medio de una sesión ssh hay una manera de iniciar un túnel, pero agregaré los detalles más adelante si veo algún interés
Pregunta Borderline ServerFault, pero estoy programando algunos guiones de shell, así que estoy intentando aquí primero :)
La mayoría de los * nixes tienen un comando que le permitirá canalizar / redirigir la salida al portapapeles / portapapeles local, y recuperar de la misma. En OS X estos comandos son
pbcopy, pbpaste
¿Hay alguna forma de replicar esta funcionalidad mientras SSHed en otro servidor? Es decir,
- Estoy usando la Computadora A.
- Abro una ventana de terminal
- I SSH a la computadora B
- Ejecuto un comando en la computadora B
- La salida de la Computadora B se redirige o se copia automáticamente al portapapeles de la Computadora A.
Y sí, sé que podría simplemente (estremecer) usar el mouse para seleccionar el texto del comando, pero me he acostumbrado tanto al flujo de trabajo de extraer la salida directamente al portapapeles que quiero lo mismo para mis sesiones remotas.
El código es útil, pero también se aprecian los enfoques generales.
¡Encontré una gran solución que no requiere una conexión ssh inversa!
Puede usar xclip en el host remoto, junto con ssh X11 forwarding y XQuartz en el sistema OSX.
Para configurar esto:
- Instalar XQuartz (lo hice con solista + pivotal_workstation :: xquartz receta , pero no es necesario)
- Ejecutar XQuartz.app
- Abra XQuartz Preferences ( +
,
) - Asegúrese de que estén habilitados "Habilitar sincronización" y "Actualizar tarjeta de trabajo cuando cambie CLIPBOARD"
-
ssh -X remote-host "echo ''hello from remote-host'' | xclip -selection clipboard"
Esta es mi solución basada en el túnel inverso SSH, netcat y xclip.
Primero crea una secuencia de comandos (por ejemplo, clipboard-daemon.sh) en tu estación de trabajo:
#!/bin/bash
HOST=127.0.0.1
PORT=3333
NUM=`netstat -tlpn 2>/dev/null | grep -c " ${HOST}:${PORT} "`
if [ $NUM -gt 0 ]; then
exit
fi
while [ true ]; do
nc -l ${HOST} ${PORT} | xclip -selection clipboard
done
y comienza en segundo plano.
./clipboard-daemon.sh&
Comenzará la salida de la tubería nc a xclip y el proceso de reaparición luego de recibir parte de los datos
Luego, inicie la conexión ssh al host remoto:
ssh user@host -R127.0.0.1:3333:127.0.0.1:3333
Mientras está conectado en el cuadro remoto, intente esto:
echo "this is test" >/dev/tcp/127.0.0.1/3333
luego intente pegar en su estación de trabajo
Por supuesto, puede escribir el script del contenedor que inicia clipboard-daemon.sh primero y luego ssh session. Así es como funciona para mí. Disfrutar.
Estoy resucitando este hilo porque he estado buscando el mismo tipo de solución, y he encontrado una que funciona para mí. Es una modificación menor a una sugerencia de OSX Daily .
En mi caso, uso Terminal en mi máquina OSX local para conectarme a un servidor Linux a través de SSH. Al igual que el OP, quería poder transferir pequeños trozos de texto de la terminal a mi portapapeles local, usando solo el teclado.
La esencia de la solución:
commandThatMakesOutput | ssh desktop pbcopy
Cuando se ejecuta en una sesión ssh en una computadora remota, este comando toma la salida de commandThatMakesOutput (por ejemplo, ls, pwd) y canaliza la salida al portapapeles de la computadora local (el nombre o IP de "escritorio"). En otras palabras, usa ssh anidado: estás conectado a la computadora remota a través de una sesión ssh, ejecutas el comando allí, y la computadora remota se conecta a tu escritorio a través de una sesión ssh diferente y coloca el texto en tu portapapeles.
Requiere que su escritorio esté configurado como un servidor ssh (que le dejo a usted y a google). Es mucho más fácil si ha configurado las claves ssh para facilitar el uso rápido de ssh, preferiblemente utilizando una frase de contraseña por sesión, o lo que requiera su seguridad.
Otros ejemplos:
ls | ssh desktopIpAddress pbcopy
pwd | ssh desktopIpAddress pbcopy
Para mayor comodidad, he creado un archivo bash para acortar el texto requerido después de la tubería:
#!/bin/bash
ssh desktop pbcopy
En mi caso, estoy usando una clave especialmente nombrada
Lo guardé con el nombre de archivo cb (my mnemonic (ClipBoard). Pon el script en algún lugar de tu camino, hazlo ejecutable y listo:
ls | cb
Hay varias herramientas para acceder a las selecciones de X11, incluidos xclip y XSel . Tenga en cuenta que X11 tradicionalmente tiene selecciones múltiples, y la mayoría de los programas tienen cierta comprensión tanto del portapapeles como de la selección primaria (que no son lo mismo). Emacs también puede trabajar con la selección secundaria, pero eso es raro, y nadie sabe realmente qué hacer con los búferes de corte ...
$ xclip -help Usage: xclip [OPTION] [FILE]... Access an X server selection for reading or writing. -i, -in read text into X selection from standard input or files (default) -o, -out prints the selection to standard out (generally for piping to a file or program) -l, -loops number of selection requests to wait for before exiting -d, -display X display to connect to (eg localhost:0") -h, -help usage information -selection selection to access ("primary", "secondary", "clipboard" or "buffer-cut") -noutf8 don''t treat text as utf-8, use old unicode -version version information -silent errors only, run in background (default) -quiet run in foreground, show what''s happening -verbose running commentary Report bugs to <[email protected]>
$ xsel -help Usage: xsel [options] Manipulate the X selection. By default the current selection is output and not modified if both standard input and standard output are terminals (ttys). Otherwise, the current selection is output if standard output is not a terminal (tty), and the selection is set from standard input if standard input is not a terminal (tty). If any input or output options are given then the program behaves only in the requested mode. If both input and output is required then the previous selection is output before being replaced by the contents of standard input. Input options -a, --append Append standard input to the selection -f, --follow Append to selection as standard input grows -i, --input Read standard input into the selection Output options -o, --output Write the selection to standard output Action options -c, --clear Clear the selection -d, --delete Request that the selection be cleared and that the application owning it delete its contents Selection options -p, --primary Operate on the PRIMARY selection (default) -s, --secondary Operate on the SECONDARY selection -b, --clipboard Operate on the CLIPBOARD selection -k, --keep Do not modify the selections, but make the PRIMARY and SECONDARY selections persist even after the programs they were selected in exit. -x, --exchange Exchange the PRIMARY and SECONDARY selections X options --display displayname Specify the connection to the X server -t ms, --selectionTimeout ms Specify the timeout in milliseconds within which the selection must be retrieved. A value of 0 (zero) specifies no timeout (default) Miscellaneous options -l, --logfile Specify file to log errors to when detached. -n, --nodetach Do not detach from the controlling terminal. Without this option, xsel will fork to become a background process in input, exchange and keep modes. -h, --help Display this help and exit -v, --verbose Print informative messages --version Output version information and exit Please report bugs to <[email protected]>.
En resumen, debe probar xclip -i
/ xclip -o
o xclip -i -sel clip
/ xclip -o -sel clip
o xsel -i
/ xsel -o
o xsel -i -b
/ xsel -o -b
, dependiendo de Lo que quieras.
La solución @rhileighalmgren es buena, pero pbcopy copiará molestamente el último carácter "/ n", utilizo "head" para quitar el último carácter y evitar esto:
#!/bin/bash
head -c -1 | ssh desktop pbcopy
Mi solución completa está aquí: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
Mi forma favorita es ssh [remote-machine] "cat log.txt" | xclip -selection c
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Esto es más útil cuando no quiere (o no puede) ssh de remoto a local.
Editar: en Cygwin ssh [remote-machine] "cat log.txt" > /dev/clipboard
.
Editar: un útil comentario de nbren12:
Casi siempre es posible configurar una conexión ssh inversa utilizando el reenvío de puertos SSH. Simplemente agregue
RemoteForward 127.0.0.1:2222 127.0.0.1:22
a la entrada del servidor en su.ssh/config
local, y luego ejecutessh -p 2222 127.0.0.1
en la máquina remota, que luego redirigirá la conexión a la máquina local . - nbren12
No es un trazador de líneas único, pero no requiere ssh adicional .
- instalar
netcat
si es necesario - use termbin :
cat ~/some_file.txt | nc termbin.com 9999
cat ~/some_file.txt | nc termbin.com 9999
. Esto copiará la salida altermbin
web determbin
e imprimirá la URL a su salida. - visita esa url desde tu computadora, obtienes tu salida
Por supuesto, no lo use para contenido sensible.
Si Tooltalk está disponible para ambos sistemas, puede escribir una aplicación Tooltalk simple para hacer lo que desea hacer.