Haruskah saya sftp ke server perantara?

11

Saya tidak bisa sftp langsung ke host tertentu. Untuk memindahkan file dari mesin rumah saya ke host, saya harus sftp file ke host perantara; ssh ke host perantara; dan sftp file ke tujuan akhir. Apakah mungkin untuk menghindari kegilaan seperti itu?

pengguna74094
sumber

Jawaban:

28

Dari mesin lokal Anda, Anda dapat membuat terowongan SSH melalui host perantara ke host terakhir:

ssh user@intermediate -L 2000:final:22 -N

Ini akan membuka port 2000 di localhost Anda yang akan terhubung langsung ke server terakhir pada port 22, dengan melakukan tunneling melalui perantara perantara. Sekarang di prompt lain sambungkan dengan sftp pada port 2000 untuk diteruskan ke server final, mencatat bahwa pengguna yang ditentukan di sini adalah untuk host terakhir:

sftp -P 2000 user@localhost

Sepertinya ini milik superuser.com atau serverfault.com .

WhiteFang34
sumber
Terima kasih, saya akan mencobanya; dan Anda benar itu adalah forum yang salah; Maaf.
Setelah memberikan kata sandi pengguna @ localhost, saya menerima pesan: Menerima pesan terlalu lama 1131376238
user74094
14

Anda dapat menggunakan opsi ProxyCommand SFTP untuk secara tunnel tunnel koneksi SFTP melalui koneksi SSH (sedikit mirip dengan jawaban WhiteFang34, tetapi melalui stdin & stdout koneksi SSH, daripada port TCP lokal yang diteruskan):

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(Itu dengan asumsi host perantara memiliki netcat diinstal sebagai / usr / bin / nc - jika tidak, Anda mungkin harus menemukan / menginstal beberapa cara yang setara untuk gateway stdin & stdout ke sesi TCP.)

Apa yang benar-benar keren tentang opsi ini adalah Anda dapat menambahkannya ke file ~ / .ssh / config Anda, yang membuatnya transparan:

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

Dengan entri itu, Anda dapat menggunakan sftp, scp, dan ssh ke finalhost, dan itu akan secara otomatis memanggil terowongan. Satu-satunya bagian yang tidak transparan adalah akan meminta dua kata sandi (hosting perantara diikuti oleh hosting final), tetapi jika mau, Anda dapat menghilangkannya juga dengan keypairs SSH ...

Gordon Davisson
sumber
Terima kasih Gordon. Dibutuhkan kedua kata sandi lalu terhenti dengan pesan: Menerima pesan terlalu lama 1131376238
user74094
Kedengarannya seperti sesuatu dalam koneksi - mungkin skrip login di salah satu host, mungkin nc - menulis beberapa teks tambahan pada koneksi yang membingungkan sftp (lihat FAQ ini di snailbook.com ). 1131376238 adalah pengodean desimal dari karakter ascii "Conn", jadi mungkin itu pesan seperti "Connecting to ..." "Connected from ..." atau mungkin "Connection gagal". Cobalah dengan ssh dan bukan sftp, lihat apakah pesannya dicetak dengan jelas dan mungkin Anda bisa tahu dari mana asalnya.
Gordon Davisson
ssh bekerja dengan baik. Saya juga harus menyebutkan bahwa saya sering dihadapkan dengan pertanyaan ini: Keaslian host 'xxxxx (<tidak ada hostip untuk perintah proxy>)' tidak dapat dibangun. Sidik jari kunci RSA adalah 37: 40: d4: c7: dll. Anda yakin ingin terus terhubung (ya / tidak)? ya
user74094
Gordon, sangat berguna! Saya menambahkan ini ke file teks saya baris perintah fu oneliners. Terima kasih banyak!
Travis Leleu
Apakah ini execperlu? (Ini berfungsi dengan baik di sini tanpa bagian itu.)
Equaeghe
3

Anda dapat menyalurkan data ke proses ssh yang berjalan pada mesin Anda, kemudian menjalankan perintah pada mesin perantara yang membaca stdin dan mengirimkannya ke sftp yang sesuai.

Ini bisa dilakukan di oneliner pada mesin lokal Anda, meskipun mengutip argumen ke ssh akan membutuhkan perawatan. Saya di ponsel saya sekarang jadi sayangnya tidak bisa mengetikkan detailnya. Mungkin orang lain bisa menyelesaikan jawaban ini sebagai latihan!

jl6
sumber
0

Saya berasumsi host terakhir adalah firewall dan saya hanya bisa menebak metode yang bisa Anda gunakan untuk mengatasinya.

Misalnya - tampilkan ssh dari mesin lokal Anda, lalu ssh ke host pertama, lalu ssh ke host kedua dan sftp dari host terakhir ke mesin Anda.


sumber
0

katakanlah A dan B adalah host pertama dan kedua. Dan file yang akan disalin adalah foo

Alih-alih sftp, Anda dapat menggunakan yang berikut ini

kucing foo | ssh A "cat -> foo"

Sekarang, Anda dapat membuat daisy-chain 2 ini bersama-sama

kucing foo | ssh A "cat - | ssh B \" cat -> foo \ ""


sumber
Saya suka, jadi saya mencobanya. Butuh kata sandi untuk A, lalu menghasilkan pesan: Verifikasi kunci host gagal.
user74094