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 .
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):
(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:
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 ...
sumber
exec
perlu? (Ini berfungsi dengan baik di sini tanpa bagian itu.)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!
sumber
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
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