scp 또는 sftp를 통해 원격 파일을 stdout으로 파이프하는 방법은 무엇입니까?


28

ssh를 사용하면 파일 내용을 쉽게 인쇄 할 수 있습니다.

ssh host 'cat file.txt'

ssh가 비활성화되고 SFTP 만 활성화 된 경우 이전 명령을 실행하면 다음 오류가 발생합니다.

이 서비스는 sftp 연결 만 허용합니다.

이 문제를 해결하기 위해 scp또는 sshfs(아래 그림 참조)를 사용하여 임시 파일을 만들 수는 있지만 실제로는 못 생겼습니다. SSH가 비활성화되어있을 때 원격 파일의 내용을 인쇄하는 올바른 방법은 무엇입니까?

mkdir tmpdir
sshfs host: tmpdir
cat tmpdir/file.txt
fusermount -u tmpdir

# This does not work! scp -v host:file.txt . shows
# "Sink: This service allows sftp connections only."
scp host:file.txt .
cat file.txt
rm file.txt

답변:


14

컬은 cat과 같은 방식으로 파일을 표시 할 수 있습니다. 달리 지시하지 않는 한 출력을 표시하기 때문에 파일을 삭제할 필요가 없습니다.

curl -u username:password sftp://hostname/path/to/file.txt

공개 키 인증을 사용하는 경우 :

curl -u username: --key ~/.ssh/id_rsa --pubkey sftp://hostname/path/to/file.txt

기본 위치를 사용하는 경우, --key그리고 --pubkey수를 생략 할 수 :

curl -u username: sftp://hostname/path/to/file.txt

사용자 이름도 URL의 일부일 수 있으므로 최종 결과는 ssh 명령과 매우 유사합니다.

curl sftp://username@hostname/path/to/file.txt

고마워, 내가 찾던 정확히! 공개 키 인증을 확장하기 위해 귀하의 답변을 편집했습니다. 구문은 ssh / sshfs 구문과 매우 유사합니다. curl 명령이 "curl : (51) SSL 피어 인증서 또는 SSH 원격 키가 잘못되었습니다"와 함께 실패하면 -k플래그 ( --insecure)를 추가하십시오 .
Rob W

28

실행할 수있는 사람들을 위해 scp다음을 수행 할 수 있습니다.

scp remotehost:/path/to/remote/file /dev/stdout

두 방법 모두 작동하지 않습니다. 첫 번째는 하나의 라이너 sftp username@hostname:/path/to/file.txt /dev/stdout와 동일하며 "/ dev / stdout에 쓸 수 없음 : 잘못된 찾기"가됩니다. 두 번째 명령이 실패하고 내 질문의 맨 아래에 표시되는 오류가 표시됩니다.
Rob W

SFTP 양식은 저에게 잘 작동합니다. 사용중인 ssh 소프트웨어 버전에 따라 다를 수 있습니다. scp에 관해서는 "spp가 작동하면"이라고 말했습니다. 귀하의 질문에 서버가 scp를 수행하도록 허용하지 않았기 때문에 당연히 scp 명령이 실패합니다.
Kenster

ssh -V제공합니다 OpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. scp는 후드 아래에서 ssh를 사용하기 때문에 실패하고 ssh는 비활성화됩니다 (보안 조치로 serverfault.com/questions/354615/allow-sftp-but-disallow-ssh 참조 )
Rob W
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.