Apakah mungkin untuk SSH melalui port 80?

20

Saya berada di belakang firewall jaringan yang tidak membiarkan saya ssh melalui port default. Karena itu, saya tidak bisa mendorong cabang bzr ke repositori saya. Saya ingin tahu apakah mungkin untuk proksi ssh melalui port 80 sehingga saya bisa mendorong cabang.

Saya mendengar pembuka botol memungkinkan Anda melakukan itu, tetapi saya tidak yakin bagaimana melakukannya.

Jika Anda tahu ada server proxy yang berfungsi yang memungkinkan Anda melakukannya, sebutkan saja.

jokerdino
sumber
2
man sshmengungkapkan port: host: hostport. Jadi coba ssh 80:server.comatau lebih.
MarkovCh1
Itu untuk mengatur terowongan melalui -L atau -R. Jadi, Anda perlu kotak lain untuk menerobosnya.
Cesium
1
Lihat juga unix.stackexchange.com/a/190612/4319
imz - Ivan Zakharyaschev

Jawaban:

19

Firewall korporat yang baik akan memeriksa lalu lintas terlepas dari port sehingga mengubah port mungkin tidak berfungsi.

Jika Anda memiliki kontrol atas server, dan masih ingin mencobanya, Anda dapat mengubah port sshd ke port 80. Peringatan Jika Anda memiliki sesuatu yang lain berjalan pada port 80 (pada server) ini tidak akan berfungsi dan kemungkinan akan berarti Anda sepenuhnya kehilangan akses SSH ke server!

Anda harus mengedit /etc/ssh/sshd_configdan mengubah Portke 80. Lalu lari

sudo restart ssh

Dan kemudian hubungkan:

ssh user@host -p80

Jalur bzr Anda kemudian akan terlihat seperti: bzr+ssh://host:80/path/


Metode lain adalah dengan menggunakan WebDav. Ini harus mengatasi masalah firewall sepenuhnya karena semuanya terjadi pada Port 80 tetapi akan mengharuskan Anda untuk menjalankan Apache dan mengatur sejumlah hal:

  1. Dapatkan WebDav diinstal
  2. Pindahkan cabang Anda ke tempat yang tepat
  3. Gunakan plugin bzr-webdav untuk terhubung

VPN mungkin menjadi pilihan tetapi jika sshdikunci, saya berharap itu akan dikecualikan juga.

Anda mungkin hanya ingin berbicara dengan admin jaringan Anda. Anda perlu melakukan sesuatu dan mereka menghentikan Anda. Jika mereka punya alasan untuk memblokir ssh, kemungkinan mereka akan melihat upaya ekstrem untuk menghindarinya secara negatif ...

Singkatnya, mungkin lebih aman untuk berbicara dengan mereka.

Oli
sumber
7
+1 untuk membahas kebutuhan Anda dengan departemen TI Anda. Di banyak lingkungan, termasuk saya, jenis kegiatan ini akan menjadi dasar untuk penghentian.
Panther
1
Juga, jika dia akan membuat server ssh mendengarkan pada port lain, dia bisa membuatnya mendengarkan pada port 22 dan 80 dengan memiliki dua Portbaris, dengan satu untuk setiap port dalam /etc/ssh/sshd_configfile.
Azendale
Saya akan menghindari membuat daftar (daftar itu panjang dan diskusi tentang beberapa hal di dalamnya bisa menjadi sangat politis dengan cepat), tetapi pertanyaan ini mencakup banyak situasi selain dari seorang karyawan yang berusaha mengelak dari kebijakan perusahaan yang secara loyal diterapkan oleh departemen IT perusahaan sendiri. Saya semua untuk orang-orang yang mendiskusikan kebutuhan pekerjaan mereka dengan IT, tapi itu tidak selalu berlaku, dan kadang-kadang departemen IT bahkan menjawab dengan, "Tidak apa-apa, tapi kami tidak mengubah apa pun untuk mengakomodasi Anda." Secara terpisah, cukup masuk akal bahwa port 22 diblokir oleh VPN, jadi saya pikir itu patut dicoba.
Eliah Kagan
@Panther Kemudian beberapa orang akan lebih bahagia untuk mengakhiri rezim perusahaan itu.
NeverEndingQueue
15

SSH melalui proxy

Jika firewall memungkinkan Anda, Anda dapat menjalankan ssh ke port mana saja, tetapi itu membutuhkan server ssh untuk mendengarkan pada port itu. Port 80 tidak mungkin berfungsi, karena sebagian besar tempat yang memiliki firewall menganalisis lalu lintas di port itu dan memblokir apa pun yang bukan HTTP. Tetapi port 443, yang biasanya merupakan port HTTPS, sering berfungsi, karena SSH dan HTTPS sangat mirip satu sama lain dengan perangkat lunak penyaringan, sehingga sesi SSH Anda akan terlihat seperti sesi HTTPS. (Dimungkinkan untuk membedakan HTTPS dan SSH, jadi ini tidak akan berfungsi jika firewall cukup canggih.)

Jika Anda memiliki kendali atas server, buat ia mendengarkan pada port 443 di samping 22 (port ssh normal). Anda dapat mengkonfigurasi port di /etc/ssh/sshd_config: tambahkan baris

Port 443

selain Port 22itu harus sudah ada. Perhatikan bahwa ini mengasumsikan bahwa server ssh juga bukan server HTTPS. Jika ya, Anda harus menemukan port lain yang memungkinkan Anda menggunakan firewall atau menemukan server ssh lainnya (lihat penerusan di bawah).

Jika Anda tidak perlu mengatur proxy web di browser web Anda, maka Anda dapat mencoba menghubungkan langsung:

ssh -p 443 myserver.example.com

Jika berhasil, tentukan alias di ~/.ssh/config:

Host myserver
HostName myserver.example.com
Port 443

Jika Anda perlu mengatur proxy web di browser web Anda, katakan ssh untuk pergi melalui proxy. Pasang pembuka botol . Tetapkan alias seperti ini di Anda ~/.ssh/config, di mana http://proxy.acme.com:3128/proxy yang Anda gunakan untuk HTTPS ke luar (ganti dengan nama host dan port yang tepat):

Host myserver
HostName myserver.example.com
Port 443
ProxyCommand /usr/bin/corkscrew proxy.acme.com 3128 %h %p

SSH melalui SSH

Jika Anda dapat menggunakan mesin luar dengan salah satu teknik di atas tetapi tidak ke mesin yang Anda minati, gunakan itu untuk meneruskan koneksi. Dengan anggapan Anda dapat melakukan ssh ke mesin yang dipanggil mygatewaydan Anda ingin membuka server SSH mytarget, instal netcat-openbsd pada mygateway(atau, jika tidak menjalankan Ubuntu, pastikan ia memiliki ncperintah). Letakkan ini di ~/.ssh/config:

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH ke Apache

Jika host yang ingin Anda sambungkan sudah menjalankan Apache dan mendengarkan pada port 443, dan Anda memiliki kendali atas host itu, Anda dapat mengatur Apache ini untuk menerima koneksi SSH dan meneruskannya. Lihat Tunneling SSH melalui HTTP (S) .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Anda juga dapat menggunakan nc bukan pembuka botol untuk https, ya? stackoverflow.com/a/15577758/32453
rogerdpack
3

Saya baru saja membaca solusi canggih di sini:

http://benctechnicalblog.blogspot.hu/2011/03/ssh-over-connect-over-port-80.html

Anda dapat SSH pulang pada port 80 bahkan jika server rumah Anda menjalankan server web pada port 80 juga.

Dengan asumsi server rumah menjalankan Apache. Idenya melibatkan mengaktifkan mod_proxy di server Anda, kemudian membatasi itu agar terhubung ke localhost (proxy.conf):

<IfModule mod_proxy.c>
         ProxyRequests On
        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
        </Proxy>
        <Proxy localhost>
          Allow from all
        </Proxy>
        AllowCONNECT 22
        ProxyVia On
</IfModule>

Sekarang Anda dapat melakukan permintaan koneksi HTTP ke host lokal dan server web akan membuat terowongan untuk Anda, Anda hanya perlu memastikan semua lalu lintas melewati proxy Anda:

ssh -o 'ProxyCommand nc -X connect -x myhost.example.com:80 localhost 22' myhost.example.com

Pastikan koneksi localhost ke SSH tidak istimewa (untuk menghindari membiarkan orang asing masuk ...)

Ini akan berfungsi jika Anda berada di belakang router yang hanya mengizinkan port 80 keluar.

Jika Anda berada di belakang proxy (jadi Anda perlu mengatur proxy di browser Anda untuk mendapatkan web), Anda harus terlebih dahulu membuat terowongan ke host Anda sendiri, kemudian mengeluarkan permintaan CONNECT lain di dalam terowongan ini untuk sampai ke host Anda. Ini lebih canggih, Anda harus menggunakan 2 netcats untuk ini.

Segalanya mungkin, tetapi lakukanlah demi risiko Anda sendiri ...

MEMPERBARUI:

Atau sederhananya, cukup gunakan aplikasi web yang memberi Anda SSH melalui browser. http://en.wikipedia.org/wiki/Web-based_SSH

Calmarius
sumber
2

Jika Anda tidak memiliki kendali atas server untuk mengubah port SSH ke port 80 atau jika Anda tidak bisa SSH over port 80 karena firewall memblokir Anda dari mentransfer data seperti itu melalui port 80, Anda dapat mencoba TOR.

TOR adalah jaringan besar. Komputer Anda terhubung ke komputer lain di suatu tempat di dunia, komputer itu terhubung ke komputer lain hingga mencapai server SSH. Ini semua ramah firewall, terjadi pada port 443 (yang tidak diblokir oleh perusahaan Anda, atau yang lainnya ... yah, itu tidak terlalu pintar dari mereka). Secara harfiah ini hanyalah proxy atau VPN yang sangat besar, dan juga dienkripsi. Dengan cara ini, Anda dapat mengakses host apa pun pada port apa pun (juga SSH server pada port 22).

Lihatlah secara online di www.torproject.org .

Robbietjuh
sumber
2

Maafkan aku, aku harus berperan sebagai advokat setan.

Saya tahu bahwa kemungkinan besar ada alasan untuk melakukan ini, namun, mengapa admin jaringan / firewall Anda tidak membuka port spesifik yang Anda cari? Dari sudut pandang keamanan, apakah Anda ingin mengambil kesempatan bahwa inspeksi web akan kehilangan sesuatu? Jika dikonfigurasi untuk by-pass port 80 untuk lalu lintas std, dan Anda membahayakan diri Anda sendiri.

Saya setuju dengan beberapa saran di atas, di mana point to point vpn mungkin merupakan opsi yang lebih aman. Sekali lagi, dari sudut pandang keamanan, saya akan tertarik untuk mengetahui alasan Anda benar-benar melewati kebijakan keamanan dan mengapa Anda tidak dapat menempatkan server Anda di dmz atau tulang punggung untuk akses. Hanya aku. Semoga berhasil.

Solarfinder
sumber
2
Tidak selalu mungkin untuk berbicara dengan admin jaringan, dan admin jaringan tidak selalu masuk akal.
Jeremy Bicha
Misalnya, jika Anda duduk di kafe, terhubung ke WiFi, tetapi admin membatasi akses (dan Anda masih perlu terhubung sekarang).
old-ufo