¿Cómo obtengo una cadena de nombre de usuario/nombre de grupo a partir de uid/gid numérico en un host remoto en una sesión SFTP?

¿Cómo obtengo una cadena de nombre de usuario/nombre de grupo a partir de uid/gid numérico en un host remoto en una sesión SFTP?

Estoy automatizando la transferencia de archivos a través de SFTP y me quedé atascado al cambiar la propiedad del archivo en el host remoto. El problema es que los comandos SFTP chowny chgrpsolo aceptan uids/gids numéricos, que no se conocen de antemano. El escenario esperado para mi automatización es que el usuario informe los destinos de los archivos y encadene nombres de usuarios y nombres de grupos.

¿Hay alguna manera de consultar el uid/gid numérico de la cadena de nombre de usuario/grupo en el host remoto a través de la sesión SFTP?

Una solución sencilla sería abrir una sesión SSH adicional y utilizar comandos chowny shells normales chgrp. Pero la empresa en la que trabajo utiliza tokens cronometrados para la autenticación y, en resumen, una sesión adicional significa 30 segundos adicionales por host, algo imposible para instalaciones por lotes.
Una opción más difícil sería buscar ls -ldirectorios, tal vez archivos, para encontrar uno con las credenciales necesarias y luego ls -nobtener la versión numérica. Pero esto tiene el riesgo de tomar demasiado tiempo, no encontrar directorios/archivos adecuados o incluso quedarse atascado si un directorio tiene demasiados archivos para lsfuncionar...

Respuesta1

No es posible.

Al menos no con la versión 3 de SFTP, ampliamente utilizada.

Respuesta2

Una solución sencilla sería abrir una sesión SSH adicional y utilizar comandos chowny shells normales chgrp. Pero la empresa en la que trabajo utiliza tokens cronometrados para la autenticación y, en resumen, una sesión adicional significa 30 segundos adicionales por host, algo imposible para instalaciones por lotes.

Con -o ControlMaster=y -o ControlPath=puedes compartir varias sesiones a través de una única conexión de red (ver man 5 ssh_config). Opciones cortas para sshson -My -Srespectivamente (verman 1 ssh). Este enfoque requiere que usted se autentiqueuna vez. sftpde OpenSSH admite -oy puede compartir una conexión con ssh.

El procedimiento:

  1. ssh -Nf -o ControlMaster=yes -o ControlPath=… user@server. La conexión maestra. Aquí usted se autentica antes de que la conexión pase a segundo plano.

  2. ssh -o ControlPath=… …y/o sftp -o ControlPath=… …y/o incluso sshfs(ver más abajo). Siempre que se ciña al enchufe de control elegido ( ControlPath) y la conexión maestra funcione, estos comandos la utilizarán. Divertirse.

    Por ejemplo, puede ejecutarlo uid="$(ssh … "id -u someuser")"y utilizarlo $uidmás adelante en su script.

  3. Finalmente ssh -o ControlPath=… -O exit …para terminar la conexión maestra.

Mis otras respuestas que pueden ser útiles:

información relacionada