Tengo un servidor Ubuntu al que me estoy conectando usando SSH.
Necesito cargar archivos de mi máquina en /var/www/
el servidor, los archivos /var/www/
son propiedad de root
.
Con PuTTY, después de iniciar sesión, sudo su
primero tengo que escribir y mi contraseña para poder modificar archivos /var/www/
.
Pero cuando estoy copiando archivos usando WinSCP, no puedo crear crear / modificar archivos /var/www/
, porque el usuario con el que me estoy conectando no tiene permisos en los archivos /var/www/
y no puedo decir sudo su
lo que hago en caso de una sesión ssh .
¿Sabes cómo podría lidiar con esto?
Si estuviera trabajando en mi máquina local, llamaría gksudo nautilus
pero en este caso solo tengo acceso de terminal a la máquina.
Respuestas:
Tienes razón, no hay
sudo
cuando trabajasscp
. Una solución alternativa es usarscp
para cargar archivos en un directorio donde su usuario tiene permisos para crear archivos, luego iniciar sesión a través de ssh y usarsudo
para mover / copiar archivos a su destino final.Otra solución sería cambiar los permisos / propiedad de los directorios en los que carga los archivos, para que su usuario no privilegiado pueda escribir en esos directorios.
En general, trabajar en la
root
cuenta debe ser una excepción, no una regla: la forma en que formula su pregunta me hace pensar que tal vez está abusando un poco, lo que a su vez genera problemas con los permisos; en circunstancias normales, no necesita privilegios de superadministrador para acceder a sus propios archivos.Técnicamente, puede configurar Ubuntu para permitir el inicio de sesión remoto directamente como
root
, pero esta característica está deshabilitada por una razón, por lo que le recomiendo encarecidamente que no lo haga.fuente
scp -R mysite [email protected]:/home/dimitris/
2.ssh [email protected]
3.sudo mv ~/mysite /var/www
- es un proceso de 2 pasos, primeroscp
los archivos a su directorio de inicio, luego inicia sesión a través de ssh y copia / mueve los archivos a donde deberían estarOtro método es copiar usando tar + ssh en lugar de scp:
fuente
sudo: sorry, you must have a tty to run sudo
. Si agrego "-t" para asignar un TTY, obtengoPseudo-terminal will not be allocated because stdin is not a terminal.
. No puedo ver esto funcionando sin sudo sin contraseña.ssh -t [email protected] "sudo tar -x --no-same-owner -C /var/www"
sudo tar
, archivar, cambiar los permisos usandochmod
ychown
, y luego copiarlo a local. Especialmente si es un directorio.De manera rápida
Del servidor a la máquina local:
De la máquina local al servidor:
fuente
También puedes usar
ansible
para lograr esto.Copie al host remoto utilizando el
copy
módulo de ansible :Recuperar desde host remoto utilizando el
fetch
módulo de ansible :NOTA:
-i HOST,
sintaxis no es un error tipográfico. Es la forma de usar ansible sin necesidad de un archivo de inventario.-b
hace que las acciones en el servidor se realicen como root.-b
se expande a--become
, y el valor predeterminado--become-user
es root, siendo el valor predeterminado--become-method
sudo.flat=yes
copia solo el archivo, no copia la ruta remota completa que conduce al archivocopy
módulo, pero no con elfetch
módulo.Invocación específica para esta pregunta
Aquí hay un ejemplo que es específico y completamente especificado, suponiendo que el directorio en su host local que contiene los archivos a distribuir es
sourcedir
, y que el nombre de host del destino remoto eshostname
:Con la invocación concisa siendo:
PD: Me doy cuenta de que decir "solo instala esta herramienta fabulosa" es una respuesta sorda. Pero he encontrado que Ansible es súper útil para administrar servidores remotos, por lo que instalarlo seguramente le brindará otros beneficios más allá de la implementación de archivos.
fuente
ansible -i "hostname," all -u user --become -m copy -a ...
-i 'host,'
como una sintaxis válida? Creo que es fácil perder la puntuación así cuando se lee un comando. (Para el lector, quiero decir, si no el caparazón)-i 'host,'
igual que-i host,
o-i "host,"
. En general, prefiero mantener estas invocaciones lo más cortas posible para evitar que sean desalentadoras, pero debe sentirse libre de hacerlo tan detallado y explícito como cree que es necesario para mayor claridad.Cuando ejecuta
sudo su
, los archivos que cree serán propiedad de root, pero no es posible iniciar sesión directamente como root con ssh o scp de manera predeterminada. Tampoco es posible usar sudo con scp, por lo que los archivos no son utilizables. Solucione esto reclamando la propiedad sobre sus archivos:Suponiendo que su nombre de usuario fuera dimitri, puede usar este comando.
A partir de entonces, como se menciona en otras respuestas, la forma "Ubuntu" es usar sudo, y no inicios de sesión de root. Es un paradigma útil, con grandes ventajas de seguridad.
fuente
sudo chow ...
para cada directorio: S-R
inchown
le dice que cambie la propiedad de ese directorio y todos los archivos y directorios secundarios de forma recursiva ... para que pueda hacer lo que quiera.¿Puede ser la mejor forma de usar
rsync
( Cygwin / cwRsync en Windows) sobre SSH?Por ejemplo, para cargar archivos con el propietario
www-data
:En su caso, si necesita privilegios de root, el comando será así:
Ver: scp al servidor remoto con sudo .
fuente
Si utiliza las herramientas OpenSSH en lugar de PuTTY, puede lograr esto iniciando la
scp
transferencia de archivos en el servidor consudo
. Asegúrese de tener unsshd
demonio ejecutándose en su máquina local. Conssh -R
usted puede darle al servidor una forma de contactar su máquina.En su máquina:
Además de iniciar sesión en el servidor, esto reenviará cada conexión realizada en el puerto 11111 del servidor al puerto 22 de su máquina: el puerto en el que
sshd
está escuchando.En el servidor, inicie la transferencia de archivos de esta manera:
fuente
Puede usar un guión que he escrito inspirado en este tema:
pero esto requiere algunas cosas locas (que por cierto se hace automáticamente por script)
Aquí va el guión:
fuente
Puede combinar ssh, sudo y, por ejemplo, tar, para transferir archivos entre servidores sin poder iniciar sesión como root y sin tener permiso para acceder a los archivos con su usuario. Esto es un poco complicado, así que escribí un guión para ayudarlo. Puede encontrar el script aquí: https://github.com/sigmunau/sudoscp
o aquí:
fuente
Aquí hay una versión modificada de la respuesta de Willie Wheeler que transfiere los archivos a través de tar pero también admite pasar una contraseña a sudo en el host remoto.
El poco de magia extra aquí es la opción -S para sudo. Desde la página de manual de sudo:
Ahora realmente queremos que la salida de tar se canalice a ssh y eso redirija el stdin de ssh al stdout de tar, eliminando cualquier forma de pasar la contraseña a sudo desde el terminal interactivo. (Podríamos usar la función ASKPASS de sudo en el extremo remoto, pero esa es otra historia). Sin embargo, podemos obtener la contraseña en sudo al capturarla de antemano y anteponerla a la salida tar realizando esas operaciones en un subshell y canalizando la salida de la subshell en ssh. Esto también tiene la ventaja adicional de no dejar una variable de entorno que contiene nuestra contraseña colgando en nuestro shell interactivo.
Notarás que no ejecuté 'leer' con la opción -p para imprimir un mensaje. Esto se debe a que la solicitud de contraseña de sudo se pasa convenientemente de vuelta al stderr de nuestro shell interactivo a través de ssh. Quizás se pregunte "¿cómo se está ejecutando sudo dado que se ejecuta dentro de ssh a la derecha de nuestra tubería?" Cuando ejecutamos múltiples comandos y canalizamos la salida de uno a otro, el shell principal (el shell interactivo en este caso) ejecuta cada comando en la secuencia inmediatamente después de ejecutar el anterior. A medida que se ejecuta cada comando detrás de una tubería, el shell principal adjunta (redirige) la salida estándar del lado izquierdo a la entrada estándar del lado derecho. La salida se convierte en entrada a medida que pasa por los procesos.
Nuestro shell interactivo es PID 7168, nuestro subshell es PID 7969 y nuestro proceso ssh es PID 7970.
El único inconveniente es que la lectura aceptará la entrada antes de que sudo tenga tiempo de enviarla nuevamente. En una conexión rápida y un host remoto rápido, no lo notará, pero podría hacerlo si alguno de ellos es lento. Cualquier retraso no afectará la capacidad de ingresar a la solicitud; puede aparecer después de que hayas comenzado a escribir.
Tenga en cuenta que simplemente agregué una entrada de archivo de host para "remote_Host" a mi máquina local para la demostración.
fuente