SFTP セッションでリモート ホスト上の数値 uid/gid から文字列のユーザー名/グループ名を取得するにはどうすればよいですか?

SFTP セッションでリモート ホスト上の数値 uid/gid から文字列のユーザー名/グループ名を取得するにはどうすればよいですか?

SFTP 経由でファイル転送を自動化していますが、リモート ホストでファイルの所有権を変更するときに行き詰まってしまいました。問題は、SFTPchownchgrpコマンドが数値の uid/gid のみを受け入れることであり、これらは事前にはわかりません。自動化の想定シナリオは、ユーザーがファイルの宛先と文字列のユーザー名とグループ名を通知することです。

SFTP セッションを介してリモート ホストの文字列 user/groupname から数値 uid/gid を照会する方法はありますか?

簡単な回避策としては、追加の SSH セッションを開いて、通常のシェルchownchgrpコマンドを使用することです。しかし、私が働いている会社では、認証に時間制限付きトークンを使用しており、簡単に言えば、追加のセッションはホストごとに 30 秒の追加時間を意味し、バッチ インストールには適していません。
より難しいのはls -l、ディレクトリ (おそらくファイル) で必要な資格情報を持つディレクトリを見つけてから、ls -n数値バージョンを取得することです。ただし、これには時間がかかりすぎたり、適切なディレクトリ/ファイルが見つからなかったり、ディレクトリにファイルが多すぎてls作業できない場合に停止したりするリスクがあります...

答え1

不可能です。

少なくとも、広く使用されている SFTP バージョン 3 ではそうではありません。

答え2

簡単な回避策としては、追加の SSH セッションを開いて、通常のシェルchownchgrpコマンドを使用することです。しかし、私が勤務する会社では、認証に時間制限付きトークンを使用しており、簡単に言えば、追加のセッションはホストごとに 30 秒の追加時間を意味し、バッチ インストールには適していません。

と を使用する-o ControlMaster=と、-o ControlPath=単一のネットワーク接続で複数のセッションを共有できます (を参照man 5 ssh_config)。 の短縮オプションはそれぞれとsshです(を参照) 。-M-Sman 1 ssh)。この方法では認証が必要です一度sftpOpenSSH の.は をサポートしており-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 …マスター接続を終了します。

役に立つかもしれない他の回答:

関連情報