Puncte:0

Cum să redirecționați portul 8080 de la un server îndepărtat la client de la client folosind un tunel ssh?

drapel ke

Am instalat GitLab în docker pe o mașină îndepărtată. Aș dori acum să redirecționez portul 8080 de la această mașină îndepărtată către portul meu local 8080.

Pe mașina îndepărtată:

sudo docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 8080:80 --publish 2222:22 --name gitlab --restart always --volume $GITLAB_HOME/config:/etc /gitlab --volum $GITLAB_HOME/logs:/var/log/gitlab --volum $GITLAB_HOME/data:/var/opt/gitlab gitlab/gitlab-ce:latest

Pe mașina mea locală:

ssh -N -o "ExitOnForwardFailure da" -R 8080:localhost:8080 someuser@the-distant-server -vvv

Primesc următoarea eroare:

debug1: gaj: rețea
debug3: primire pachet: tip 80
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug3: primire pachet: tip 4
debug1: La distanță: /home/someuser/.ssh/authorized_keys:1: opțiuni cheie: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug3: primire pachet: tip 82
debug1: eșec de redirecționare la distanță pentru: ascultați 8080, conectați localhost:8080
Eroare: redirecționarea portului de la distanță a eșuat pentru portul de ascultare 8080

Și într-adevăr, în /var/log/auth.log, primesc următoarea eroare:

9 iulie 16:51:42 distant-server sshd[2723782]: cheie publică acceptată pentru un utilizator de la portul 192.168.200.182 44850 ssh2: RSA SHA256:
9 iulie 16:51:42 distant-server sshd[2723782]: pam_unix(sshd:session): sesiune deschisă pentru utilizatorul someuser de (uid=0)
9 iulie 16:51:42 distant-server systemd-logind[1083]: Noua sesiune 116923 a utilizatorului someuser.
9 iulie 16:51:42 distant-server systemd[2723795]: pam_unix(systemd-user:session): sesiune deschisă pentru utilizatorul someuser de (uid=0)
9 iulie 16:51:43 distant-server sshd[2723812]: eroare: bind [127.0.0.1]:8080: Adresă deja utilizată
9 iulie 16:51:43 distant-server sshd[2723812]: eroare: channel_setup_fwd_listener_tcpip: nu pot asculta portul: 8080
9 iulie 16:51:43 distant-server sshd[2723782]: pam_unix(sshd:session): sesiune închisă pentru utilizatorul someuser
9 iulie 16:51:43 distant-server systemd-logind[1083]: Sesiunea 116923 a fost deconectată. Se așteaptă ieșirea proceselor.
9 iulie 16:51:43 distant-server systemd-logind[1083]: sesiunea 116923 a fost eliminată.

Îmi spune bind [127.0.0.1]:8080: Adresă deja utilizată.

  1. Nu înțeleg cum pot asculta portul 8080 de la mașina îndepărtată dacă niciun proces nu poate scrie în el. Cred că am o înțelegere greșită a modului în care porturile/ascultarea/scrierea/ssh funcționează aici.
  2. Cum pot repara ssh comandă pentru a face acest tunel să funcționeze și pentru a accesa instanța GitLab pe my 127.0.0.1:8080?
Puncte:1
drapel kz

Răspuns scurt: utilizați comutatorul ssh -L în loc de -R.

Explicație: Pe mașina îndepărtată, deschideți un container docker care publică portul 8080. Aceasta înseamnă, în detaliu, că gazda docker deschide un ASCULTA priză și așteptați conexiunile de intrare.

Există două tipuri de redirecționări de porturi: -L și -R:

  • -L deschide o priză de ascultare pe mașina dvs. locală și redirecționează această conexiune de intrare prin tunelul ssh și deschide o conexiune pe gazda de la distanță la adresa specificată (localhost:8080 în acest caz, care este exact ceea ce doriți)
  • -R funcționează invers: așteaptă conexiunile de intrare pe mașina de la distanță și le trimite către gazda locală. Acest lucru eșuează, desigur, deoarece aveți deja o priză de ascultare pe această adresă (containerul docker!)

Întotdeauna trebuie să te gândești la cine inițiază conexiunea. Instanța Gitlab este probabil accesibilă printr-un browser, ceea ce înseamnă că dvs local browserul încearcă să deschidă conexiunea, prin urmare trebuie să aveți soclul de ascultare disponibil local.

vinzee avatar
drapel ke
Este prima dată când citesc despre socket-urile `LISTEN` când caut explicații despre tunelurile ssh. A făcut totul mult mai clar.
Martin avatar
drapel kz
cu siguranță ar trebui să aruncați o privire la elementele de bază ale rețelei TCP. Nu e de mirare că ai înțeles greșit opțiunile tunelului ssh...

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.