SFTP 세션에서 원격 호스트의 숫자 uid/gid에서 문자열 사용자 이름/그룹 이름을 어떻게 얻습니까?

SFTP 세션에서 원격 호스트의 숫자 uid/gid에서 문자열 사용자 이름/그룹 이름을 어떻게 얻습니까?

SFTP를 통해 파일 전송을 자동화하고 있는데 원격 호스트에서 파일 소유권을 변경할 때 멈췄습니다. 문제는 SFTP chownchgrp명령이 사전에 알려지지 않은 숫자 uids/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). sshare -M및 각각 에 대한 짧은 옵션 -S(참조man 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 …마스터 연결을 종료합니다.

유용할 수 있는 다른 답변:

관련 정보