SFTP 리소스에 명령 출력 저장

SFTP 리소스에 명령 출력 저장

저는 단지 tarball을 생성하여 SFTP 리소스에만 저장하고 싶습니다. 나는 데이터 손상에 대한 편집증이 있기 때문에 일반적으로 의존할 수 있기를 원할 경우 타르 볼의 sha256sum을 함께 저장하고 아카이브를 생성할 때 이를 계산하고 아카이브를 작성한 후 이를 읽어 저장 매체를 저장합니다. .

나는 이것이 매우 간단하다고 생각하여 다음 명령을 입력했습니다.

tar --exclude='./somefolder' -zc . | tee "sftp://mydomain.ending/storage/location/on/server/sth.tar" | sha256sum

또한 원격 터미널용으로 Nautilus를 사용해 보았습니다.

tar --exclude='./somefolder' -zc . | tee ":/run/user/1000/gvfs/sftp:host=mydomain.ending/storage/location/on/server/sth.tar" | sha256sum

그러나 출력은 다음과 같습니다.

tee: 'sftp://mydomain.ending/storage/location/on/server/sth.tar': No such file or directory

그리고

tee: ':/run/user/1000/gvfs/sftp:host=mydomain.ending/storage/location/on/server/sth.tar': No such file or directory

각기.

타르 볼을 먼저 로컬에 저장하지 않고 어떻게 저장합니까? 원격 리소스를 쉽게 사용할 수 있도록 일부 폴더에는 먼저 설치하지 않는 것이 좋습니다.

저는 Ubuntu 16.04(Linux 4.4.0 포함)를 사용하고 있습니다.

답변1

멋진 gvfs 또는 sshfs 설치가 없으면 sftp 클라이언트를 사용해야 합니다. 나는 lftpFIFO 파이프에서 작동하기 때문에 >=4.7을 선택했습니다( scp또한 그렇지 sftp않음).

이것은 bashLinux에서 작동합니다.

tar --exclude='./somefolder' -zc . \
 | tee >(lftp -c 'connect sftp://user:pass@server/path/ ;put /dev/stdin -o sth.tar.gz;') \
 | sha256sum

ssh또는 클라이언트 사용 (대화형 비밀번호 인증에는 외부 괄호가 필요함):

(tar --exclude='./somefolder' -zc . \
 | tee >(ssh user@server "cat > /path/sth.tar.gz") \
 | sha256sum)

tee's매개변수도 약간 이상해 보이지만 이는 아래 에 설명된 bash추가 명령을 피하기 위한 mkfifo이식 불가능한 마법 입니다 man bash.

프로세스 교체

프로세스 대체는 명명된 파이프(FIFO) 또는 /dev/fd 명명된 파일 열기 방법을 지원하는 시스템에서 지원됩니다. <(목록) 또는 >(목록) 형식을 사용합니다. 프로세스 목록의 입력 또는 출력은 FIFO 또는 /dev/fd의 파일에 연결됩니다. 파일 이름은 확장 결과로 현재 명령에 인수로 전달됩니다. >(목록) 형식을 사용하는 경우 파일에 쓰면 목록에 대한 입력이 제공됩니다. <(목록) 형식을 사용하는 경우 목록의 출력을 얻으려면 인수로 전달된 파일을 읽어야 합니다.

답변2

gvfs노틸러스는 해당 SFTP 서버와 같은 원격 저장 위치를 ​​마운트하는 데 사용됩니다 . 이를 통해 원격 서버를 로컬 파일 시스템의 일부로 처리할 수 있습니다. 일반적으로 마운트되는 경로는 다음과 같습니다.

/run/user/<your uid>/gvfs/<server specification>/<path>

접두사는 항상 다음과 같습니다.

/run/user/<your uid>

따라서 해당 디렉토리를 통해 또는 -ing을 통해 ls마운트 지점을 찾을 수 있습니다.Tab

이 마운트 지점을 찾으면 tee평소대로 사용할 수 있습니다(명확성을 위해 줄 바꿈이 추가됨).

tar --exclude='./somefolder' -zc .  \
| tee "/run/user/1000/gvfs/sftp:host=mydomain.ending/storage/location/on/server/sth.tar"  \
| sha256sum

또는 SFTP 대신 SSH를 사용하여 GVFS 마운트를 방지하고 이식 불가능한 프로세스 교체를 방지할 수 있습니다.

tar --exclude='./somefolder' -zc .  \
| ssh mydomain.ending 'tee "/storage/location/on/server/sth.tar"' 2>/dev/null  \
| sha256sum

불행하게도 sftp이 프로그램은 단일 명령줄을 통해 원격 호스트에 파일을 푸시하는 것을 허용하지 않고 검색만 허용합니다.

@rudimeier가 지적했듯이 위의 ssh방법은 업로드됩니다.그리고 다운로드파일을 로컬에 저장하지 않도록 하세요. 다시 다운로드하고 싶지 않다면 sha256sum원격으로 다운로드하는 것이 좋습니다.

tar --exclude='./somefolder' -zc .  \
| ssh mydomain.ending 'tee "/storage/location/on/server/sth.tar" | sha256sum' 2>/dev/null

관련 정보