Bagaimana cara ssh ke server yang tidak bisa saya jangkau secara langsung?

17

Konteks

Saya menjalankan Ubuntu Desktop sebagai mesin utama saya, yang akan saya panggil D. Saya ingin terhubung ke server S melalui ssh, tetapi firewall menghalangi saya.

Saya memiliki akses ke server S, melalui jalur yang sangat rumit, melibatkan mesin virtual Windows dan Putty . Ini membuat bekerja dengan server ini sangat menjengkelkan: lingkungan yang sama sekali berbeda, salin / tempel tidak berfungsi, saya tidak dapat menggunakan desktop dengan benar saat sedang terhubung dengannya (Alt-Tab rusak oleh Virtual Machine) dll

Saya telah memverifikasi bahwa saya dapat ssh dari server S ke mesin desktop saya D (kebalikan dari yang saya butuhkan).

Bisakah saya memulai "penerusan porta" atau yang serupa dari server, sehingga saya dapat ssh ke server dari desktop saya?

dangonfast
sumber
2
Langsung host ... harus cinta mereka !!!
RonJohn
Kemungkinan duplikat Tunnel SSH dari A-> B-> C
muru
@muru ini adalah skenario yang berbeda, tetapi tentu saja terkait (ini tentang tunneling setelah semua!). Dalam hal ini saya ingin memalsukan D->Sdengan menyalahgunakanS->D
dangonfast

Jawaban:

32

Anda dapat menggunakan perintah berikut untuk mengatur terowongan SSH dari server jarak jauh ke mesin lokal Anda:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Ketika terowongan diatur, Anda dapat ssh ke server jauh menggunakan perintah berikut:

$ ssh -p 1234 user@localhost

Harap dicatat bahwa Anda perlu mengatur kunci ssh untuk login otomatis (tidak ada kata sandi). Jika Anda ingin membuat terowongan SSH secara interaktif, Anda dapat menghapus opsi -f -N. Untuk info lebih lanjut man ssh,.

Khaled
sumber
Bagaimana cara terowongan ini melalui Windows VM? (Di mana saya bekerja, ada beberapa lapisan firewall dan hanya beberapa port yang dibuka.)
RonJohn
@RonJohn Saya percaya ini menggunakan fakta bahwa (untuk OP) ssh-ing dari server ke desktop berfungsi, jadi ini mengatur terowongan dari server (port 22) langsung ke mesin desktop (port 1234) yang dapat digunakan untuk terhubung ke ssh di server (yang menggunakan port 22). Windows VM hanya digunakan untuk mengatur terowongan. (tolong koreksi saya jika saya salah)
pizzapants184
@dangonfast Selain jawaban, Anda mungkin menemukan dokumen nilai berikut: spencerstirling.com/computergeek/sshtunnel.html
Pryftan
@RonJohn Dokumen yang baru saja saya tautkan dapat membantu menjawab pertanyaan itu juga, setidaknya sejauh beberapa lapis firewall dll. (Jika ingatan saya benar - sudah lama sekali saya membacanya .. Saya hanya ingat memiliki tautan dari tahun lalu).
Pryftan
1
@ pizzapants184 memang, itu adalah titik awal saya: ssh dari S -> D, jadi saya ingin menyalahgunakan ini untuk secara efektif melakukan D -> S, meskipun itu tidak bekerja secara langsung. Mengapa jaringan dikonfigurasi seperti itu, adalah sesuatu yang luput dari saya. Itu bisa disengaja atau kesalahan konfigurasi, tetapi selama itu berhasil untuk saya ...
dangonfast
5

Jika Anda menjalankan versi OpenSSH (7.3+) yang lebih baru, maka Anda dapat menggunakan ProxyJumpbakes mana saja bersama-sama secara ajaib:

ssh -J windows_machine remote_server

Yang mana dalam ~/.ssh/configpenampilan Anda seperti:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpmendukung sintaks SSH lengkap, jadi jika Anda jimaktif windows_serverdan menggunakan port 2222untuk ssh. remote_serverada di IP 192.168.0.110dari windows_servermaka Anda dapat menulis:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

Dan masih berlari ssh remote_serveruntuk sampai ke sana.


Jika Anda menjalankan versi SSH yang lebih lama, gunakan ProxyCommand - ini memungkinkan Anda untuk memberitahu SSH untuk terlebih dahulu menjalankan perintah untuk membuat koneksi proxy, sebelum menjalankan perintah SSH yang sebenarnya.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Ini menggunakan opsi SSH -W , yang merupakan singkatan untuk sintaks netcat yang lebih misterius .

Perhatikan bahwa, ketika Anda menjalankan ssh remote_serverAnda sekarang berada di windows_machineAnda perlu memastikan bahwa Anda menggunakan IP dari remove_server kotak melompat daripada IP dari mesin Anda - ini mungkin sama.

Anda kemudian dapat menambahkan arahan ini ke ~/.ssh/configfile Anda :

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Ini berarti bahwa jika remote_server ada mesin yang berbeda seperti yang terlihat dari windows_machinemaka Anda dapat meletakkannya di konfigurasi dan masih hanya menggunakan ssh remote_server.

Boris the Spider
sumber
1
Ini jawaban yang jauh lebih baik.
Robert Riedl
Meskipun bermanfaat, ini tidak menjawab pertanyaan yang diajukan. OP menyatakan bahwa mereka tidak dapat SSH dari D-> S (apa yang mereka inginkan), tetapi mereka dapat SSH dari S-> D. Tidak ada proxy ssh di antaranya (malah ada mesin virtual windows, mungkin sedang diakses oleh RDP).
mbrig
@ mbrig memang. Saya belum mencoba solusi ini, tetapi saya akan terkejut jika itu berhasil: Saya firewall dari D -> S
dangonfast
Tapi Anda mengatakan Anda bisa sampai ke mesin windows - dari yang saya mengerti itu bisa bertindak sebagai kotak lompatan antara Anda dan mesin lainnya.
Boris the Spider
1
Saya bisa masuk ke mesin windows dengan alat propietary (VMWare Horizon). Saya tidak pernah mengatakan saya bisa ssh untuk itu. Saya bahkan menguji ini sebelum memposting pertanyaan ini dengan menginstal server ssh pendamping Putty (saya lupa namanya), tetapi pengujian saya gagal. Saya berasumsi ssh juga firewall untuk subnet windows.
dangonfast
1

Daripada mencoba untuk menghindari hal-hal dan membuat jalur berbelit-belit, tidak bisakah Anda hanya meminta SSH dari desktop Anda ke server untuk diizinkan? Jika Anda memiliki kebutuhan untuk itu dan Anda harus mengakses server saya tidak bisa melihat mengapa Anda akan menolak permintaan tersebut.

Solarflare
sumber
Mau jelaskan downvote? Pertanyaannya adalah "Bagaimana cara ssh ke server yang tidak dapat saya jangkau secara langsung?" jadi jawaban saya untuk menerapkan aturan firewall untuk mengizinkannya valid. Ini juga merupakan cara yang tepat untuk memutarnya sesuai dengan praktik keamanan yang baik.
Solarflare
Saya berada di minggu pertama kontrak tiga bulan dengan pelanggan perusahaan besar. Saya belum diberi laptop (saya menggunakan laptop saya), dan hanya sebuah meja. Saya mendapat banyak kredensial untuk menggunakan layanan yang berbeda, dan saya hampir tidak bisa mengatur semuanya. Yang ingin saya lakukan bukanlah persyaratan sulit untuk melakukan pekerjaan saya: Saya dapat bekerja di VM, dan itulah yang akan dikatakan bos saya jika saya mulai mengajukan pertanyaan lucu. Atau dia akan mengarahkan saya ke Help Desk yang akan menendang kaleng di jalan selama beberapa minggu / bulan ke depan.
dangonfast
Bagi saya bekerja di VM akan dengan mudah berarti hilangnya produktivitas 50%, jadi saya ingin menghindarinya sebanyak mungkin. Tetap saja, saya suka pertunjukan ini!
dangonfast
1
Saya bisa mengerti itu. Dalam pengalaman saya, 'pelanggan perusahaan besar' cenderung menjadi sangat marah ketika kontraktor menghindari firewall dan kebijakan untuk melakukan pekerjaan mereka, bahkan jika itu untuk tujuan altruistik. Fakta bahwa Anda dapat SSH dari server ke desktop Anda mengatakan kepada saya bahwa Anda tidak dapat melakukan kebalikannya adalah kekhilafan atau sesuatu yang telah dilakukan untuk tujuan tertentu.
Solarflare
4
Ini adalah satu-satunya solusi nyata jika Anda ingin menghindari risiko dipecat karena menghindari kebijakan ... Paling tidak, bicarakan dengan orang-orang yang bertanggung jawab sebelum menggunakan solusi Khaleds sehingga mereka tahu apa yang Anda lakukan.
Sven