SSH melalui beberapa host menggunakan ProxyCommand?


11

Saya memiliki entri di ~ / .ssh / config di komputer saya di rumah yang terlihat seperti ini:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

di mana gateway.example.comserver di tempat kerja yang terhubung ke Internet publik dan jaringan internal. Kotak gateway menyelesaikan foo dan bar menggunakan entri di / etc / hosts.

Masalah saya adalah bahwa saya perlu menjangkau kotak yang ada di sisi lain foo. Sebut saja "baz". Tuan rumah "baz" ada di jaringan pribadi lain yang terhubung dengan foo, tetapi bukan yang terhubung dengan "gateway".

Saya sudah mencoba menggunakan ini:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

Tetapi itu tidak berhasil, dan saya sedikit keluar dari kedalaman saya. Bagaimana saya melakukan ini?

Saya tidak berpikir itu penting, tapi saya melakukan ini di Ubuntu 10.

Jawaban:


13

Mudah.

Asumsikan pengaturan jaringan berikut:

contoh pengaturan jaringan

Anda harus dapat menggunakan file ~ / .ssh / config yang terlihat seperti ini:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

Idenya di sini adalah bahwa SSH Anda tidak tahu bagaimana untuk sampai ke "foo", sehingga SSH di sana akan berhasil. Dan dari sana, Anda bisa "nc" ke baz. Dan jika ada host lain di jaringan pribadi internal bersama "baz", Anda bisa menambahkannya ke baris "host baz".

Ini pada dasarnya memperlakukan host "foo" sebagai pintu gerbang ke "baz", sama seperti "gateway" adalah pintu gerbang ke "foo".

Bersih?


13

Mengenai jawaban Ghoti ini: daripada menggunakan netcat ( "ssh ... nc %h 22"), dimulai dengan OpenSSH 5.4, Anda dapat melakukan ini secara langsung dengan: "ssh -W %h:22 ...". Dengan cara ini, Anda tidak perlu khawatir tentang apakah netcat dipasang di tempat yang tepat.


1
Poin yang bagus, terima kasih. Ini adalah pertanyaan lama, tapi saya mungkin juga mengklarifikasi bahwa ketika saya menjalankan Ubuntu di workstation saya, server "gateway" adalah Busybox Linux lama dengan OpenSSH 5.3, dan server "foo" dan "baz" adalah FreeBSD (OpenSSH 5.4). Jadi saya akan membutuhkan setidaknya satu netcat.
Graham

@Graham No. Hanya klien yang perlu 5,4 atau lebih untuk -Wbekerja. Itu bergantung pada kode port forwarding di sisi server, yang jauh lebih tua.
kasperd

1

Menggunakan kunci pribadi yang disimpan di komputer lokal Anda, masukkan perintah ini dengan keypath pribadi, nama pengguna shell, dan nama host / alamat IP diubah ke kebutuhan ssh tujuan-> gateway-> tujuan lokal Anda.

Perhatikan bahwa ProxyCommand lebih disukai daripada Agen Penerusan untuk mengurangi risiko kompromi otentikasi kunci pribadi (menggunakan gateway dan koneksi agen ssh lokal untuk kompromi host lebih lanjut seolah-olah pembajak memiliki kunci pribadi) ketika gateway / jumperbox dibajak root.

Perintah Tunggal Untuk Proxy SSH ke Server (simpan kedua kunci pribadi di komputer lokal):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

0

Inilah yang saya lakukan untuk keluar dari jaringan yang dilindungi ke Internet.

Saya menggunakan laptop saya untuk bekerja dengan kode di build . Karena build dibatasi dari akses Internet, untuk mengkloning repo dari github.com, pertama-tama saya perlu beralih ke toolbox , yang juga tidak memiliki akses internet. Tetapi dapat mengakses gw , yang memiliki Internet.

Seperti ini:

Skema lompat SSH

Saya .ssh/configsedang membangun :

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

Penjelasan.

  1. Sudut pandang adalah dari build . Tidak ada konfigurasi di server lain.
  2. Pertama, saya menyatakan, bahwa untuk mendapatkan gw Anda perlu melakukannya melalui toolbox .
  3. Kedua, saya menyatakan, bahwa untuk sampai ke github.com , Anda harus melakukannya melalui gw . Secara internal SSH menggunakan aturan sebelumnya.
  4. Pada akhirnya, git clone git@github.com:aRepo/Therehanya bekerja!

Bersih?

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.