Solución 1:
rssh shell (http://pizzashack.org/rssh/) está diseñado precisamente para este propósito.
Dado que RHEL/CentOS 5.2 no incluye un paquete para rssh, puede buscar aquí para obtener un RPM:http://dag.wieers.com/rpm/packages/rssh/
Para usarlo, simplemente configúrelo como un shell para un nuevo usuario como este:
useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1
..o cambiar la shell por una existente como esta:
chsh -s /usr/bin/rssh scpuser1
..y editar /etc/rssh.conf
para configurar rssh shell - especialmente descomentar allowscp
para habilitar el acceso a SCP para todos los usuarios de rssh.
(Es posible que también desee utilizar chroot para mantener a los usuarios contenidos en sus hogares, pero esa es otra historia).
Solución 2:
Llegué tarde a esto, pero podría usar las claves ssh y especificar el comando exacto permitido en su archivo ~/.ssh/authorized_keys, p.
sin reenvío de puertos, sin pty, comando ="destino de origen de scp" ssh-dss ...
Es posible que deba usar ps to en el objetivo para establecer la configuración de comando correcta.
PD:si ejecuta un comando test scp con "-v", puede ver algo como esto
debug1: Sending command: scp -v -t myfile.txt
Notará que "-t" es una opción scp no documentada, utilizada por el programa en el otro extremo. Esto le da una idea de lo que necesita poner en las claves_autorizadas.
EDITAR: Puede encontrar más información (con varios enlaces) en esta pregunta de StackOverflow.
Aquí hay un ejemplo práctico de esto, para un usuario llamado backup_user
en el lado del servidor.
~backup_user/.ssh/authorized_keys
contenido en el lado del servidor (con algunas restricciones de seguridad más):
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...
Cree un enlace en ~backup_user/ que vincule al directorio donde se debe acceder al contenido.
$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT
Ahora, desde el lado del cliente, el siguiente comando debería funcionar:
scp -v -r -P 2222 -i .ssh/id_rsa_key_file path/to/data [email protected]:~/CONTENT
Qué hace este comando:
- Muestra información detallada (opcional :puede eliminar el
-v
desde el comando y el archivo authorized_keys) - Copia recursivamente el contenido de la ruta/a/los datos. (opcional :puede eliminar
-r
desde el comando y el archivo authorized_keys si no desea hacer una copia recursiva) - Utiliza el puerto 2222 para conectarse al servidor (opcional :puede eliminar
-P 2222
del comando) - Utiliza un archivo de identidad para automatizar la conexión (opcional :puede eliminar
-i .ssh/id_rsa_key_file
- El contenido de
path/to/data
se copiará en/path/to/directory/with/accessible/content/
Para hacer una copia de un archivo (o varios) del servidor al cliente, debe crear un script de shell que maneje esto como se describe aquí
Solución 3:
Llego un poco tarde a la fiesta, sin embargo, te sugiero que le eches un vistazo al ForceCommand
directiva de OpenSSH.
Subsystem sftp internal-sftp
Match group sftponly
ForceCommand internal-sftp
De acuerdo, esto es SFTP y no SCP, pero alcanza el mismo objetivo, de manera más segura que con un shell restringido. Además, puede hacer chroot al usuario si lo desea.
Solución 4:
Yo uso MySecureShell para hacer esto. También puede configurar otras restricciones.
https://github.com/mysecureshell/mysecureshell
Limita las conexiones solo a SFTP/SCP. Sin acceso de shell.
Solución 5:
Recomiendo usar scponly.
Es un shell restringido que permite a los usuarios hacer exactamente lo que parece, enviar archivos SCP al servidor, pero no iniciar sesión. La información y las descargas del código fuente para el software están disponibles aquí y los paquetes RPM precompilados están disponibles a través de Repositorios EPEL YUM.
Una vez instalado, deberá configurar cada cuenta de usuario, a la que desea restringir el acceso, para usar el shell restringido recién instalado. Puede hacerlo manualmente a través de /etc/passwd o usar el siguiente comando:usermod -s /usr/bin/scponly USERNAME