Wie erhalte ich in einer SFTP-Sitzung einen Zeichenfolgen-Benutzernamen/Gruppennamen aus einer numerischen UID/GID auf einem Remote-Host?

Wie erhalte ich in einer SFTP-Sitzung einen Zeichenfolgen-Benutzernamen/Gruppennamen aus einer numerischen UID/GID auf einem Remote-Host?

Ich automatisiere die Dateiübertragung über SFTP und stecke fest, als ich den Dateieigentümer im Remote-Host ändere. Das Problem ist, dass SFTPs chownund chgrpBefehle nur numerische UIDs/GIDs akzeptieren, die im Voraus nicht bekannt sind. Das erwartete Szenario für meine Automatisierung ist, dass der Benutzer Dateiziele sowie Benutzernamen und Gruppennamen in Zeichenfolgen angibt.

Gibt es eine Möglichkeit, die numerische UID/GID über die SFTP-Sitzung aus dem String-Benutzer-/Gruppennamen im Remote-Host abzufragen?

Eine einfache Problemumgehung wäre, eine zusätzliche SSH-Sitzung zu öffnen und normale Shells chownund chgrpBefehle zu verwenden. Aber das Unternehmen, in dem ich arbeite, verwendet zeitgesteuerte Token zur Authentifizierung, und kurz gesagt bedeutet eine zusätzliche Sitzung zusätzliche 30 Sekunden pro Host, was bei Batch-Installationen nicht funktioniert.
Schwieriger wäre es, ls -lVerzeichnisse, vielleicht Dateien, zu durchsuchen, eines mit den erforderlichen Anmeldeinformationen zu finden und dann ls -ndie numerische Version abzurufen. Dies birgt jedoch das Risiko, dass es zu lange dauert, keine geeigneten Verzeichnisse/Dateien gefunden werden oder sogar hängen bleibt, wenn ein Verzeichnis zu viele Dateien enthält, um zu lsfunktionieren ...

Antwort1

Es ist nicht möglich.

Zumindest nicht mit der weit verbreiteten SFTP-Version 3.

Antwort2

Eine einfache Problemumgehung wäre, eine zusätzliche SSH-Sitzung zu öffnen und normale Shells chownund chgrpBefehle zu verwenden. Aber das Unternehmen, in dem ich arbeite, verwendet zeitgesteuerte Token zur Authentifizierung und kurz gesagt bedeutet eine zusätzliche Sitzung zusätzliche 30 Sekunden pro Host, was bei Batch-Installationen nicht funktioniert.

Mit -o ControlMaster=und -o ControlPath=können Sie mehrere Sitzungen über eine einzige Netzwerkverbindung gemeinsam nutzen (siehe man 5 ssh_config). Die Kurzoptionen für sshsind -Mbzw. -S(sieheman 1 ssh). Dieser Ansatz erfordert eine Authentifizierungeinmal. sftpvon OpenSSH unterstützt -ound kann eine Verbindung mit teilen ssh.

Das Verfahren:

  1. ssh -Nf -o ControlMaster=yes -o ControlPath=… user@server. Die Master-Verbindung. Hier authentifizieren Sie sich, bevor die Verbindung in den Hintergrund geht.

  2. ssh -o ControlPath=… …und/oder sftp -o ControlPath=… …und/oder sogar sshfs(siehe unten). Solange Sie bei der gewählten Steuerbuchse bleiben ( ControlPath) und die Master-Verbindung funktioniert, werden diese Befehle diese verwenden. Viel Spaß.

    Sie können es beispielsweise ausführen uid="$(ssh … "id -u someuser")"und $uidspäter in Ihrem Skript verwenden.

  3. Zum Schluss ssh -o ControlPath=… -O exit …beenden Sie die Master-Verbindung.

Meine anderen Antworten, die nützlich sein könnten:

verwandte Informationen