Tengo una DMZ con un servidor web que ejecuta Ubuntu 11.04 y un servidor de aplicaciones que ejecuta Ubuntu 11.10. He configurado las cosas para poder realizar scp desde el servidor web al servidor de aplicaciones ejecutando
ssh-keygen
ssh-copy-id [email protected]
donde 192.168.1.6 es la dirección IP local de la aplicación. server y peter es el nombre de mi cuenta de inicio de sesión. Sin embargo, me gustaría copiar los archivos en respuesta a una llamada a través de un sitio web basado en LAMP usando un comando en un archivo PHP. Mi problema es que el "usuario" de mis aplicaciones web es www-data, que no es un usuario real, por lo que no puedo crear claves para él.
Probé el procedimiento descritoaquí. entonces lo hice
su
su www-data
en el servidor web (supongo que el "servidor" según la discusión de Berkeley). Desafortunadamente, todavía me piden la contraseña cuando intento acceder al servidor/cliente de aplicaciones.
Lo intenté
scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
El resultado fue muy similar al que hice (con éxito) desde la cuenta de Peter. Sin embargo, estas últimas líneas son diferentes.
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: /var/www/.ssh/id_dsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering ECDSA public key: /var/www/.ssh/id_ecdsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
[email protected]'s password:
Estaría muy agradecido si alguien pudiera decirme o ayudarme a encontrar dónde radica el problema.
Respuesta1
Después de leer el enlace que proporcionó: asegúrese de usar claves_autorizadas, no claves_autorizadas2. Este último ha quedado obsoleto durante años y no funcionó en absoluto en algunas versiones de OpenSSH.
La forma más sencilla de diagnosticar esto es con una instancia de depuración del servidor SSH. En el servidor, ejecute:
# /usr/sbin/sshd -ddep 2222
... que ejecuta el demonio SSH en modo de depuración, escuchando en el puerto 2222. Rehaga su comando scp con:
$ scp -o port=2222 ...
... y ver lo que dice el servidor.
Para las preocupaciones de seguridad de John: si decide continuar usando la cuenta www-data, puede limitar su clave solo a ciertas acciones (como transferir ciertos archivos) usando una opción de "comando forzado" en claves_autorizadas.
Respuesta2
Dijiste que lo intentaste
scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
Pero la clave que le gustaría utilizar no aparece por ningún lado. Intentar:
scp -vvv -i /path/to/private/key /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
De todos modos, debes asegurarte de que tu conexión esté restringida a este comando específico. No estoy seguro de que SCP proporcione formas de restringir el comando (como el comando forzado con SSH). En su lugar, usaría SSH sobre rsync para asegurarme de que solo se inicie un comando rsync. Esto proporciona básicamente el mismo servicio que scp, pero su clave puede etiquetarse con un comando forzado, lo que puede ser más seguro.
Respuesta3
Utilicé inotify para implementar el método sugerido por John Gardeniers. Fue fácil y ahora funciona bien. Acabo de escribir una aplicación C++ que realiza el scp cuando se modifica un archivo en el directorio, como se puede hacer desde el código PHP. Funciona bien.
gracias,
pedro