SFTP 리소스에 명령 출력 저장

SFTP 리소스에 명령 출력 저장

방금 타르 볼을 만들고 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이식 불가능한 마술입니다 . 설명은 다음과 같습니다 .bashmkfifoman bash

프로세스 대체

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

답변2

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

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

나는 접두사가 항상 다음과 같다고 확신합니다.

/run/user/<your uid>

ls따라서 해당 디렉토리를 통해 또는 -ing을 통해 이 마운트 지점을 찾을 수 있습니다 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

관련 정보