Bagaimana cara mem-pipe file remote ke stdout di atas scp atau sftp?

28

Menggunakan ssh, mudah untuk mencetak isi file menggunakan

ssh host 'cat file.txt'

Ketika ssh dinonaktifkan, dan hanya SFTP yang diaktifkan, menjalankan perintah sebelumnya memberikan kesalahan berikut:

Layanan ini hanya memungkinkan koneksi sftp.

Untuk mengatasi masalah ini, saya bisa membuat file sementara menggunakan scpatau sshfs(seperti yang ditunjukkan di bawah), tetapi itu terlihat sangat jelek. Apa cara yang tepat untuk mencetak konten file jarak jauh ketika SSH dinonaktifkan?

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
Rob W
sumber

Jawaban:

14

Curl dapat menampilkan file dengan cara yang sama seperti kucing. Tidak perlu menghapus file karena hanya menampilkan output kecuali Anda menyuruhnya melakukan sebaliknya.

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

Jika Anda menggunakan otentikasi kunci publik:

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

Jika Anda menggunakan lokasi default, maka --keydan --pubkeydapat dihilangkan:

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

Nama pengguna juga dapat menjadi bagian dari URL, sehingga hasil akhir terlihat sangat dekat dengan perintah ssh:

curl sftp://username@hostname/path/to/file.txt
brwtx
sumber
Terima kasih, persis apa yang saya cari! Saya telah mengedit jawaban Anda untuk memperluas otentikasi kunci publik, ternyata sintaksinya sangat mirip dengan sintaks ssh / sshfs. Jika perintah curl gagal dengan "curl: (51) sertifikat rekan SSL atau kunci jarak jauh SSH tidak OK", tambahkan saja -kflag ( --insecure).
Rob W
28

Untuk orang yang bisa berlari scp, Anda bisa melakukan ini:

scp remotehost:/path/to/remote/file /dev/stdout
Kenster
sumber
Tidak ada metode yang berfungsi. Yang pertama setara dengan one-liner sftp username@hostname:/path/to/file.txt /dev/stdoutdan menghasilkan "Tidak bisa menulis ke" / dev / stdout ": Pencarian ilegal". Perintah kedua gagal, dan menunjukkan kesalahan yang ditampilkan di bagian bawah pertanyaan saya.
Rob W
Formulir SFTP berfungsi dengan baik untuk saya. Ini mungkin tergantung pada versi perangkat lunak ssh yang Anda gunakan. Mengenai scp, saya memang mengatakan "jika scp bekerja". Anda menetapkan dalam pertanyaan Anda bahwa server tidak mengizinkan Anda untuk melakukan scp, jadi tentu saja perintah scp akan gagal untuk Anda.
Kenster
ssh -Vmemberi OpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. scp gagal karena menggunakan ssh di bawah tenda, dan ssh dinonaktifkan (sebagai langkah keamanan, lihat misalnya serverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
Rob W