Cambio de usuario mientras scp

16

Necesito copiar el archivo entre máquinas Linux. El problema que el usuario que uso para iniciar sesión ( myuser) es diferente del usuario que puede acceder al archivo.

Si solo voy ssha la máquina, puedo cambiar el uso del usuario sudo su someuser, ¿puedo hacerlo de alguna manera scp?

Mientras usaba WinSCP, logré hacerlo, configurando SCP / Shell, por lo que creo que debe haber una forma similar de hacerlo a través de shell puro.

Tarlog
fuente
Estoy confundido. ¿Por qué no inicias sesión como el usuario que manipula el archivo?
rahmu
Porque es imposible iniciar sesión con el otro usuario.
Tarlog
¿Qué tal conectarse sshy ejecutar scp, algo como esto ssh myuser@host "sudo scp ...":?
rahmu
¿Quizás la respuesta aquí puede funcionar en tal situación? unix.stackexchange.com/questions/43094/… @Tarlog Esto supone que en la máquina remota en sí, puede ssh someuser @ remote
Bernhard

Respuestas:

9

Suponiendo que el usuario con el que PUEDE ssh no necesita una contraseña para sudo su en el usuario de destino, puede intentar esto:

dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile" 

... Tenga en cuenta que todavía no estoy convencido de que simplemente configurar targetuserpara permitir solo scp / sftp / rsync a través de SSH y usar un par de claves RSA para la autenticación no sea una opción mucho mejor.

Shadur
fuente
1
o tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"para un montón de archivos
Matt
También es cierto, y supongo que podemos debatir si son útiles -zo -jno dependiendo de la velocidad de conexión y el hardware de la computadora en ambos lados ...
Shadur
3

Si conoce las credenciales del otro usuario ( someuser), puede especificarlas en su scpllamada.

De la man scppágina:

Los nombres de archivo pueden contener una especificación de usuario y host para indicar que el archivo se copiará a / desde ese host. Los nombres de archivos locales pueden hacerse explícitos utilizando nombres de ruta absolutos o relativos para evitar que scp trate los nombres de archivos que contienen ':' como especificadores de host. También se permiten copias entre dos hosts remotos.

Aquí está la sintaxis utilizada:

[[user@]host:]/path/to/file

Ejemplo

Desea copiar el archivo /home/foo/bardesde host1su host local, utilizando el usuario someuser, aquí está el comando:

scp someuser@host1:/home/foo/bar .

Se le solicitará autenticación (contraseña, claves, ...).

rahmu
fuente
1
Es imposible iniciar sesión como el otro usuario.
Tarlog
Luego establezca un inicio de sesión solo scp / rsync con claves RSA.
Shadur
1
Es imposible usar al otro usuario usando cualquier tipo de inicio de sesión. Aparte de eso, ya uso las claves RSA para ssh / scp.
Tarlog
1

Probablemente sea ​​posible , pero diría que es una forma muy incómoda de hacerlo.

Mi primera sugerencia es iniciar sesión como ese usuario. Incluso si no tiene la contraseña de ese usuario, puede agregar su propia clave ssh pública a sus claves_autorizadas y luego scp usando su clave, como muestra rahmu.

Si eso no es posible, mi segunda sugerencia es iniciar sesión por ssh, sudo al usuario y crear un archivo tar de los archivos que desea copiar y ponerlo en algún lugar que su propio usuario pueda leer. Entonces scp abajo ese tarfile.

Jenny D
fuente
Es imposible iniciar sesión con el otro usuario. Sí, descubrí la segunda sugerencia yo mismo. Buscando una manera fácil :)
Tarlog
El enlace publicado por gcb debería ser útil, entonces. Al menos si vas a hacer esto más de una vez. O, por supuesto, puede cambiar los derechos de acceso al archivo para darle acceso a su propio usuario.
Jenny D
Bueno, estoy tratando de crear un script (que se utilizará varias veces, por supuesto) que será utilizado por diferentes usuarios. Por lo tanto, concederme el acceso realmente no ayudará. Cualquiera que pueda 'sudo su otheruser' debería poder ejecutar el script.
Tarlog
Gotcha Comenzaría con el enlace de gcb, luego, si tiene problemas con el script, publíquelo y vea si podemos buscar ayuda de forma colectiva.
Jenny D