Esta respuesta se desarrolla tanto sobre la respuesta elegida al agregar más seguridad.
Esa respuesta discutió la forma general
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Donde la seguridad puede estar ausente en los sshpermisos que permite <user B>el host B>a sshen host Ay ejecutar cualquier comando.
Por supuesto Bque Ael acceso ya pueden estar cerrada por una sshclave, e incluso puede tener una contraseña. Pero otra capa de seguridad puede restringir el alcance de los comandos permitidos que se Bpueden ejecutar A, por ejemplo, para que rm -rf /no se pueda invocar. (Esto es especialmente importante cuando la sshclave 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 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 sshsesión en adelante host-Bes simplemente:
cat <file> | ssh <user-A>@<host A> to_clipboard
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 Bes user-B, y B tiene una clave ssh id-clip, que se ha creado de la manera habitual ( ssh-keygen).
Luego, en user-Ael directorio ssh hay un archivo
/home/user-A/.ssh/authorized_keys
que reconoce la clave id-clipy permite la sshconexión.
Por lo general, el contenido de cada línea authorized_keyses exactamente la clave pública que se autoriza, por ejemplo, el contenido de id-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:
command="/home/user-A/.ssh/allowed-commands.sh id-clip",no-agent-forwarding,no-port-forwarding,no-user-rc,no-x11-forwarding,no-pty <content of file id-clip.pub>
El comando designado "/home/user-A/.ssh/allowed-commands.sh id-clip", y solo ese comando designado, se ejecuta cada vez que id-clipse usa la tecla para iniciar una sshconexión host-A, sin importar en qué comando se escriba la sshlínea de comando .
El comando indica un archivo de script allowed-commands.sh, y el contenido de ese archivo de script es
#/bin/bash
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.
Id=${1}
case "$SSH_ORIGINAL_COMMAND" in
"to-clipboard")
notify-send "ssh to-clipboard, from ${Id}"
cat | xsel --display :0 -i -b
;;
*)
echo "Access denied"
exit 1
;;
esac
La llamada original a la sshmáquina Bfue
... | ssh <user-A>@<host A> to_clipboard
La cadena to-clipboardpasa a allowed-commands.shla variable de entorno SSH_ORIGINAL_COMMAND. Además, hemos pasado el nombre de la clave id-clip, desde la línea en la authorized_keysque solo se accede por id-clip.
La línea
notify-send "ssh to-clipboard, from ${Id}"
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
cat | xsel --display :0 -i -b
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_config parámetros
Finalmente, se deben configurar algunos parámetros en /etc/ssh/sshd_configel host Apara garantizar el permiso de conexión y el permiso para usar la sshtecla solo sin contraseña:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Para hacer que el sshdservidor vuelva a leer la configuración
sudo systemctl restart sshd.service
o
sudo service sshd.service restart
conclusión
Es un esfuerzo configurarlo, pero otras funciones además to-clipboardse pueden construir en paralelo en el mismo marco.
:'<,'>w !ssh desktop pbcopy