วิธีไพพ์ไฟล์ระยะไกลเพื่อ stdout ผ่าน scp หรือ sftp?


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

Curl สามารถแสดงไฟล์ในแบบเดียวกับที่แมวต้องการ ไม่จำเป็นต้องลบไฟล์เพราะมันจะแสดงเอาท์พุทเว้นแต่คุณจะบอกให้ทำอย่างอื่น

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 ฉันพูดว่า "ถ้า SCP ใช้งานได้" คุณยอมรับในคำถามของคุณว่าเซิร์ฟเวอร์ไม่อนุญาตให้คุณทำการสแกนดังนั้นตามปกติคำสั่ง scp จะล้มเหลวสำหรับคุณ
Kenster

ssh -VOpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014จะช่วยให้ SCP ล้มเหลวเพราะใช้ SSH ภายใต้ประทุนและ SSH เป็นคนพิการ (ในขณะที่มาตรการรักษาความปลอดภัยให้ดูเช่นserverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
ร็อบ W
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.