Tunnel koneksi ssh melalui mesin perantara dalam satu perintah

10

Apakah ada cara, dalam satu perintah, untuk membuat koneksi ssh dari komputer saya A, melalui komputer B, ke komputer C, sehingga saya memiliki akses ke shell di komputer C?

Kerutan (yang tampaknya mengesampingkan hanya meneruskan koneksi ssh menggunakan opsi -L) adalah bahwa saya memiliki kata sandi ke akun di komputer B, dan akun di komputer B diizinkan untuk terhubung ke akun di komputer C, tetapi Saya tidak memiliki kata sandi untuk akun di komputer C.

kewarasan
sumber

Jawaban:

8

Saya mengerti bahwa Anda hanya ingin masuk ke komputer C, tidak benar-benar menyalurkan apa pun dari A ke C. Jadi, ini harus dilakukan caranya:

ssh -t computer-b "ssh computer-c"

Anda mungkin harus memasukkan kata sandi dua kali, pertama untuk komputer B dan kemudian untuk komputer C, tetapi ini dapat dihindari dengan menggunakan otentikasi pasangan kunci ssh.

af.
sumber
1
Terima kasih - itu berhasil! Jika saya mungkin sangat berani untuk meminta tindak lanjut. Adakah ide bagaimana saya bisa scp file dari A ke C dalam satu perintah?
sanity
Itu agak rumit. Itu bisa dilakukan dengan menambahkan tar ke dalam campuran, tetapi jika hanya satu file dan komputer B memiliki ruang disk untuk menahannya untuk sementara waktu, akan lebih mudah untuk menyalinnya dalam dua langkah.
af.
Anda juga dapat melakukan ini tiga kali! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak
0

Anda mungkin ingin menggunakan ProxyCommand SSH: http://benno.id.au/blog/2006/06/08/ssh_proxy_command

Rory
sumber
Saya tidak dapat menemukan cara untuk membuat ini berfungsi karena saya tidak memiliki kata sandi untuk komputer C, dan pendekatan ini tampaknya memerlukannya. Terbuka untuk saran karena pendekatan ini tampaknya lebih elegan.
sanity
0

Jika Anda menggunakan kunci ssh, Anda dapat membuat kunci baru untuk mesin B dan menggunakannya untuk koneksi dari A ke B. Pada mesin B, Anda dapat menambahkan

command="ssh C" ssh-....

dalam ~/.ssh/authorized_keysfile. Itu berarti bahwa setiap kali Anda terhubung ke B dengan kunci ssh itu, ia akan menjalankan ssh Cperintah.

Saya tidak tahu apakah ini bekerja dengan scp.

Rory
sumber
0

Menggunakan ProxyCommand

Lihat man ssh_config. Saya sarankan memanfaatkan ProxyCommand. Mari kita ambil skenario asli Anda:

  • Komputer A (komputer Anda)
  • Komputer B (nama host proxy)
  • Komputer C (hanya dapat dijangkau melalui SSH dari Komputer B)

Edit ~/.ssh/configdengan konten berikut.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Sekarang Anda akan dapat mencapai Komputer C. secara transparan

ssh computerc

Keuntungan dari metode ini

Lebih aman

Anda hanya perlu kunci pribadi Anda berada di Komputer A (komputer Anda). The ncperintah akan bertindak sebagai proxy di mana SSH akan mengenkripsi lalu lintas melalui. Ini termasuk otentikasi. Merupakan ide yang sangat buruk untuk mendistribusikan kunci pribadi Anda ke beberapa server (karena setiap server yang dikompromikan dengan kunci pribadi Anda pada akhirnya akan mengkompromikan kunci pribadi Anda).

Cocok dengan Banyak tujuan

Satu dapat mencocokkan beberapa komputer tujuan menggunakan Host. Komputer tunggal atau komputer apa pun dalam jaringan tertentu (misalnya 192.168.35.0/24dalam contoh di atas) untuk mem-proxy melalui Komputer B. Ini juga berfungsi sebagai alias.

ssh 192.168.35.27

Pada contoh di atas, itu akan proksi melalui Komputer B untuk sampai ke alamat IP.

Proxy rantai daisy

Dengan menggunakan metode ini, Anda dapat membuat daisy chain sebanyak mungkin proksi otomatis. mis. Anda dapat menambahkan Komputer D yang hanya dapat dijangkau dari Komputer C dan akan berfungsi secara transparan.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdakan secara otomatis mem-proxy melalui Komputer C dan Komputer B dalam ssh_configcontoh di atas .

Sam Gleske
sumber
Saya menggunakan ProxyJump, bukan ProxyCommand dan berfungsi dengan baik. Tampaknya sekarang ada lebih banyak opsi.
fgiraldeau