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 none
bandera 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" | pbcopy
cat
para 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:22
a la entrada del servidor en su local.ssh/config
y luego ejecutessh -p 2222 127.0.0.1
en 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-host
en el host remoto:echo 'hello from remote-host' | xclip -selection clipboard
-X
para 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ésecho
del portapapeles del host remotoxclip
funciona y debe sincronizarse con su host cliente SSH local. Nota como @ gdw2 dice, "El| xclip
está 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:
xclip
en 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
, solotee
lo 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 2000
comando 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 -p
funciona para mí, pero simplementenc -l
no. 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 ...
En resumen, deberías probar
xclip -i
/xclip -o
oxclip -i -sel clip
/xclip -o -sel clip
oxsel -i
/xsel -o
oxsel -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 yes
esté configurado en el/etc/ssh/sshd_config
archivo remoto . También asegúrese de quexauth
esté instalado en el lado remoto. Para una máquina sin cabeza, puede instalarxauth
yxvfb
.xvfb
menció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 .
netcat
si es necesariocat ~/some_file.txt | nc termbin.com 9999
. Esto copiará la salida altermbin
sitio 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
ssh
permisos que permite<user B>
elhost B>
assh
enhost A
y ejecutar cualquier comando.Por supuesto
B
queA
el acceso ya pueden estar cerrada por unassh
clave, e incluso puede tener una contraseña. Pero otra capa de seguridad puede restringir el alcance de los comandos permitidos que seB
pueden ejecutarA
, por ejemplo, para querm -rf /
no se pueda invocar. (Esto es especialmente importante cuando lassh
clave no tiene una contraseña).Afortunadamente,
ssh
tiene 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
ssh
restricció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
ssh
sesión en adelantehost-B
es 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
B
esuser-B
, y B tiene una clave sshid-clip
, que se ha creado de la manera habitual (ssh-keygen
).Luego, en
user-A
el directorio ssh hay un archivoque reconoce la clave
id-clip
y permite lassh
conexión.Por lo general, el contenido de cada línea
authorized_keys
es 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-clip
se usa la tecla para iniciar unassh
conexiónhost-A
, sin importar en qué comando se escriba lassh
lí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
ssh
máquinaB
fueLa cadena
to-clipboard
pasa aallowed-commands.sh
la variable de entornoSSH_ORIGINAL_COMMAND
. Además, hemos pasado el nombre de la claveid-clip
, desde la línea en laauthorized_keys
que 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-send
funciona en Ubuntu 18.04, tal vez no en otros).En la linea
el parámetro
--display :0
es necesario porque el proceso no tiene su propia pantalla X con un portapapeles, por lo que debe especificarse explícitamente. Este valor:0
funciona 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_config
parámetrosFinalmente, se deben configurar algunos parámetros en
/etc/ssh/sshd_config
el hostA
para garantizar el permiso de conexión y el permiso para usar lassh
tecla solo sin contraseña:Para hacer que el
sshd
servidor vuelva a leer la configuracióno
conclusión
Es un esfuerzo configurarlo, pero otras funciones además
to-clipboard
se 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-K
para borrar la salida del terminal2)
cat <filename>
para mostrar el contenido del archivo3)
Cmd-S
para 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
!