如何在 SFTP 會話中從遠端主機上的數字 uid/gid 取得字串使用者名稱/群組名稱?

如何在 SFTP 會話中從遠端主機上的數字 uid/gid 取得字串使用者名稱/群組名稱?

我正在透過 SFTP 自動進行檔案傳輸,但在更改遠端主機中的檔案所有權時遇到了困難。問題是 SFTPchownchgrp指令只接受數字 uids/gids,而這些數字是事先未知的。我的自動化的預期場景是使用者通知文件目的地以及字串使用者名稱和群組名稱。

有沒有辦法透過 SFTP 會話從遠端主機中的字串使用者/群組名稱查詢數字 uid/gid?

一個簡單的解決方法是開啟一個額外的 SSH 會話並使用常規 shellchownchgrp命令。但我工作的公司使用定時令牌進行身份驗證,簡而言之,額外的會話意味著每個主機需要額外的 30 秒,這對於批量安裝來說是不可能的。
更難的是在ls -l目錄(也許是檔案)中找到具有所需憑證的目錄,然後ls -n取得數位版本。但這存在花費太長時間、找不到合適的目錄/文件的風險,甚至在目錄有太多文件無法ls工作時陷入困境...

答案1

這是不可能的。

至少廣泛使用的 SFTP 版本 3 不是這樣。

答案2

一個簡單的解決方法是開啟一個額外的 SSH 會話並使用常規 shellchownchgrp命令。但我工作的公司使用定時令牌進行身份驗證,簡而言之,額外的會話意味著每個主機需要額外的 30 秒,這對於批量安裝來說是不可能的。

使用-o ControlMaster=-o ControlPath=您可以透過單一網路連線共用多個工作階段(請參閱 參考資料man 5 ssh_config)。sshis-M和 的短選項-S分別為(參見man 1 ssh)。此方法需要您進行身份驗證一次sftp來自 OpenSSH 支援-o並可以與ssh.

步驟:

  1. ssh -Nf -o ControlMaster=yes -o ControlPath=… user@server。主連接。在這裡,您可以在連線轉到背景之前進行身份驗證。

  2. ssh -o ControlPath=… …和/或sftp -o ControlPath=… …和/或甚至sshfs(見下文)。只要您堅持選擇的控制套接字 ( ControlPath) 並且主連接工作,這些命令就會使用它。玩得開心。

    例如,您可以稍後在腳本中運行uid="$(ssh … "id -u someuser")"和使用。$uid

  3. 最後ssh -o ControlPath=… -O exit …終止master連線。

我的其他可能有用的答案:

相關內容