Pregunta de Borderline ServerFault, pero estoy programando algunos scripts 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 / cartón local y recuperarla. 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 (temblar) usar mi mouse para seleccionar el texto del comando, pero me he acostumbrado tanto al flujo de trabajo de la salida de pipping directamente al portapapeles que quiero lo mismo para mis sesiones remotas.
El código es útil, pero también se aprecian los enfoques generales.

:'<,'>w !ssh desktop pbcopy-e nonebandera ssh descrita aquí: unix.stackexchange.com/questions/210615/…Mi forma favorita es
ssh [remote-machine] "cat log.txt" | xclip -selection c. Esto es más útil cuando no desea (o no puede) ssh de remoto a local.Editar: en Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard.Editar: Un comentario útil de nbren12:
fuente
ssh [remote-machine] "cat log.txt" | pbcopycatpara que esto funcionara en cygwin Windows 8:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard(por supuesto, mi comando remoto no eracat; era algo más dentro de una máquina virtual vagabunda, así que realmente corrívagrant ssh -c "command" | cat > /dev/clipboard)RemoteForward 127.0.0.1:2222 127.0.0.1:22a la entrada del servidor en su local.ssh/configy luego ejecutessh -p 2222 127.0.0.1en la máquina remota, lo que redirigirá la conexión a la máquina local.¡Encontré una gran solución que no requiere una conexión ssh inversa!
Puede usar xclip en el host remoto, junto con el reenvío ssh X11 y XQuartz en el sistema OSX.
Para configurar esto:
,)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"fuente
ssh remote-host "echo 'hello from remote-host' | pbcopy? Esta sería una excelente respuesta si funcionara así:ssh -X remote-hosten el host remoto:echo 'hello from remote-host' | xclip -selection clipboard-Xpara el reenvío X11 a través de SSH, los programas X11 podrán actualizar su portapapeles a través de la configuración de XQuartz anterior. El comando único es demostrar que enviar algo a travésechodel portapapeles del host remotoxclipfunciona y debe sincronizarse con su host cliente SSH local. Nota como @ gdw2 dice, "El| xclipestá dentro de las comillas dobles". Como tal, se ejecutará como un comando en el servidor remoto para enviar algo a su portapapeles.Puerto de túnel inverso en el servidor ssh
Todas las soluciones existentes necesitan:
xclipen el servidor funciona muy bien) oAquí hay otra forma de hacerlo, aunque deberá modificar la forma en que ingresa a su computadora.
He comenzado a usar esto y no es tan intimidante como parece, así que pruébalo.
Cliente (inicio de sesión ssh)
(sugerencia: haga que esta sea una combinación de teclas para que no tenga que escribirla)
Cliente (otra pestaña)
Nota: si no lo tiene
pbcopy, soloteelo tiene en un archivo.Servidor (dentro de la sesión SSH)
Otras notas
En realidad, incluso si estás en medio de una sesión ssh, hay una manera de comenzar un túnel, pero no quiero asustar a la gente de lo que realmente no es tan malo como parece. Pero agregaré los detalles más adelante si veo algún interés
fuente
cat some_useful_content.txt | nc localhost 2000comando parece bloquearse cuando hago esto. Necesito ctr-c manualmente para detenerlo, y es solo entonces que el contenido llega al clip / cartón de mi clientenc -l -pfunciona para mí, pero simplementenc -lno. Y también tengo el problema de @AlanStorm.-c. Yo uso GNU netcat instalado por brew.Existen varias herramientas para acceder a las selecciones X11, incluidas xclip y XSel . Tenga en cuenta que X11 tradicionalmente tiene múltiples selecciones, 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 tampones de corte ...
$ xclip -help Uso: xclip [OPCIÓN] [ARCHIVO] ... Acceda a una selección de servidor X para leer o escribir. -i, -en leer el texto en la selección X de la entrada estándar o archivos (defecto) -o, -out imprime la selección al estándar (generalmente para canalización a un archivo o programa) -l, -loops número de solicitudes de selección a esperar antes de salir -d, -display X display para conectarse (p. ej. localhost: 0 ") -h, -ayuda información de uso -selección de selección para acceder ("primario", "secundario", "portapapeles" o "corte de búfer") -noutf8 no trate el texto como utf-8, use unicode antiguo -versión versión información -solo errores silenciosos, se ejecuta en segundo plano (predeterminado) -secuencia silenciosa en primer plano, muestra lo que está sucediendo -verbio comentario corriente Informe los errores a <[email protected]>$ xsel -help Uso: xsel [opciones] Manipular la selección X. Por defecto, la selección actual se emite y no se modifica si ambos La entrada estándar y la salida estándar son terminales (ttys). De otra manera, la selección actual se emite si la salida estándar no es un terminal (tty), y la selección se establece desde la entrada estándar si la entrada estándar No es un terminal (tty). Si se dan opciones de entrada o salida, entonces el programa se comporta solo en el modo solicitado. Si se requieren entradas y salidas, entonces la selección previa es salida antes de ser reemplazado por el contenido de la entrada estándar. Opciones de entrada -a, --append Agregar entrada estándar a la selección -f, --siguiente Anexar a la selección a medida que crece la entrada estándar -i, --input Lee la entrada estándar en la selección Opciones de salida -o, --output Escribe la selección en la salida estándar Opciones de acción -c, --clear Borrar la selección -d, --delete Solicita que se borre la selección y que la aplicación que lo posee borra su contenido Opciones de selección -p, --primary Operate en la selección PRIMARY (predeterminado) -s, --secondary Operar en la selección SECUNDARIA -b, --clipboard Operar en la selección CLIPBOARD -k, --keep No modifique las selecciones, pero haga que PRIMARY y las selecciones SECUNDARIAS persisten incluso después de programas fueron seleccionados en la salida. -x, --exchange Intercambia las selecciones PRIMARIA y SECUNDARIA X opciones --display displayname Especifique la conexión al servidor X -t ms, --selectionTimeout ms Especifique el tiempo de espera en milisegundos dentro del cual La selección debe ser recuperada. Un valor de 0 (cero) no especifica tiempo de espera (predeterminado) Opciones varias -l, --logfile Especifica el archivo para registrar errores cuando se desconecta. -n, --nodetach No se desconecte del terminal de control. Sin esta opción, xsel se bifurcará para convertirse en un fondo proceso en modos de entrada, intercambio y mantenimiento. -h, --help Mostrar esta ayuda y salir -v, --verbose Imprimir mensajes informativos --version Muestra información de la versión y sale Informe los errores a <[email protected]>.En resumen, deberías probar
xclip -i/xclip -ooxclip -i -sel clip/xclip -o -sel clipoxsel -i/xsel -ooxsel -i -b/xsel -o -b, dependiendo de lo que quieras.fuente
ssh -C -X user@remote-host. Si ejecutar xclip en el lado remoto no parece funcionar, asegúrese de queX11Forwarding yesesté configurado en el/etc/ssh/sshd_configarchivo remoto . También asegúrese de quexauthesté instalado en el lado remoto. Para una máquina sin cabeza, puede instalarxauthyxvfb.xvfbmención. Estaba ejecutando un servidor sin cabeza, ¡así que X11 no debe haber estado ejecutándose!Esta es mi solución basada en el túnel inverso SSH, netcat y xclip.
Primero cree un script (por ejemplo, clipboard-daemon.sh) en su estación de trabajo:
y comenzarlo en segundo plano.
Comenzará la salida de tuberías nc a xclip y el proceso de reaparición después de recibir una porción de datos
Luego, inicie la conexión ssh al host remoto:
Mientras está conectado en la caja remota, intente esto:
luego intente pegar en su estación de trabajo
Por supuesto, puede escribir una secuencia de comandos de contenedor que inicie clipboard-daemon.sh primero y luego la sesión ssh. Así es como funciona para mí. Disfrutar.
fuente
No es una línea, pero no requiere ssh extra .
netcatsi es necesariocat ~/some_file.txt | nc termbin.com 9999. Esto copiará la salida altermbinsitio web e imprimirá la URL a su salida.Por supuesto, no lo use para contenido sensible.
fuente
Esta respuesta se desarrolla tanto sobre la respuesta elegida al agregar más seguridad.
Esa respuesta discutió la forma general
Donde la seguridad puede estar ausente en los
sshpermisos que permite<user B>elhost B>asshenhost Ay ejecutar cualquier comando.Por supuesto
BqueAel acceso ya pueden estar cerrada por unasshclave, e incluso puede tener una contraseña. Pero otra capa de seguridad puede restringir el alcance de los comandos permitidos que seBpueden ejecutarA, por ejemplo, para querm -rf /no se pueda invocar. (Esto es especialmente importante cuando lasshclave no tiene una contraseña).Afortunadamente,
sshtiene una característica incorporada llamada restricción de comando o comando forzado . Consulte ssh.com o esta pregunta de serverfault.com .La solución a continuación muestra la solución de forma general junto con la
sshrestricción de comandos impuesta.Solución de ejemplo con restricción de comando agregada
Esta solución de seguridad mejorada sigue la forma general: la llamada de la
sshsesión en adelantehost-Bes simplemente:El resto de esto muestra la configuración para que eso funcione.
Configuración de restricción de comando ssh
Supongamos que la cuenta de usuario en
Besuser-B, y B tiene una clave sshid-clip, que se ha creado de la manera habitual (ssh-keygen).Luego, en
user-Ael directorio ssh hay un archivoque reconoce la clave
id-clipy permite lasshconexión.Por lo general, el contenido de cada línea
authorized_keyses exactamente la clave pública que se autoriza, por ejemplo, el contenido deid-clip.pub.Sin embargo, para imponer la restricción de comandos , el contenido que se ejecutará antepone el contenido de la clave pública (en la misma línea).
En nuestro caso:
El comando designado
"/home/user-A/.ssh/allowed-commands.sh id-clip", y solo ese comando designado, se ejecuta cada vez queid-clipse usa la tecla para iniciar unasshconexiónhost-A, sin importar en qué comando se escriba lasshlínea de comando .El comando indica un archivo de script
allowed-commands.sh, y el contenido de ese archivo de script esLa llamada original a la
sshmáquinaBfueLa cadena
to-clipboardpasa aallowed-commands.shla variable de entornoSSH_ORIGINAL_COMMAND. Además, hemos pasado el nombre de la claveid-clip, desde la línea en laauthorized_keysque solo se accede porid-clip.La línea
es solo un cuadro de mensaje emergente para hacerle saber que se está escribiendo el portapapeles; probablemente también sea una buena característica de seguridad. (
notify-sendfunciona en Ubuntu 18.04, tal vez no en otros).En la linea
el parámetro
--display :0es necesario porque el proceso no tiene su propia pantalla X con un portapapeles, por lo que debe especificarse explícitamente. Este valor:0funciona en Ubuntu 18.04 con el servidor de ventana Wayland. En otras configuraciones, podría no funcionar. Para un servidor X estándar, esta respuesta podría ayudar.host-A/etc/ssh/sshd_configparámetrosFinalmente, se deben configurar algunos parámetros en
/etc/ssh/sshd_configel hostApara garantizar el permiso de conexión y el permiso para usar lasshtecla solo sin contraseña:Para hacer que el
sshdservidor vuelva a leer la configuracióno
conclusión
Es un esfuerzo configurarlo, pero otras funciones además
to-clipboardse pueden construir en paralelo en el mismo marco.fuente
La solución @rhileighalmgren es buena, pero pbcopy copiará molestamente el último carácter "\ n", yo uso "head" para quitar el último carácter para evitar esto:
Mi solución completa está aquí: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
fuente
La solución más simple de todas, si está en OS X usando Terminal y ha estado trabajando en un servidor remoto y desea obtener los resultados de un archivo de texto o un registro o un csv, simplemente:
1)
Cmd-Kpara borrar la salida del terminal2)
cat <filename>para mostrar el contenido del archivo3)
Cmd-Spara guardar la salida del terminalDeberá eliminar manualmente la primera línea y la última línea del archivo, pero este método es un poco más simple que confiar en la instalación de otros paquetes, "túneles inversos" e intentar tener una IP estática, etc.
fuente
scp!