Puncte:1

Crearea unei conexiuni SSH inverse persistente de la serverul de la distanță la clientul de acasă

drapel au

Am un client acasă la care aș dori să mă conectez prin SSH de la serverul meu Ubuntu la distanță. în prezent, creez un job cron care apelează în mod persistent de la clientul meu de acasă la serverul meu de la distanță.

Pana acum am incercat: ssh -R 2222:localhost:22 root@<server-ip> -p 2222 și ssh -L 2222:localhost:22 root@<server-ip> -p 2222 într-un job cron.

Ascult pe server folosind nc -lvnp 2222 și primesc un mesaj de conexiune care spune Conexiune primită pe 104.136.5.228 63119 SSH-2.0-OpenSSH_8.8p1 Debian-1

De asemenea, am încercat să folosesc cheia privată a serverului meu pentru a mă autentifica prin SSH. De la client: ssh-copy-id root@<ip-server> și ssh -i id_rsa root@<ip-server>.

Răspunsul serverului: root@<server-ip>: Permisiune refuzată (cheie publică).

Dar o coajă inversă nu se prezintă. Orice ajutor în direcția corectă este foarte apreciat.

John Ronald avatar
drapel ca
Asigurați-vă că ~/.ssh/authorized_keys are permisiunile corecte
Puncte:2
drapel br
gma

Dacă doriți să faceți o conexiune ssh la gazda dvs. de acasă, aveți nevoie de un daemon ssh care rulează pe el:

# presupunând că serverul ssh este deja instalat pe home-host
home-host $ sudo systemctl start sshd

Puteți crea un tunel ssh invers persistent între gazdele de acasă și de la distanță cu:

home-host $ ssh -Nf -R 2222:localhost:22 remote-host

-Nf va pune clientul ssh în fundal fără a executa nicio comandă pe server.

-R 2222:localhost:22 va aloca un socket pentru a asculta la localhost:2222/tcp pe remote-host. Acest socket va redirecționa toate pachetele către home-host:22/tcp prin conexiunea securizată stabilită.

Acum, conectat într-un terminal pe gazdă la distanță, vă puteți conecta la demonul ssh care rulează pe gazdă home cu:

gazdă la distanță $ ssh localhost -p 2222

Rețineți că puteți utiliza această tehnică pentru a vă conecta la orice serviciu de rețea care rulează pe home-host, nu numai sshd. De exemplu, dacă aveți un server web care rulează pe 80/tcp pe home-host, acesta poate fi tunelat cu:

home-host $ ssh -Nf -R 8080:localhost:80 remote-host

Deci, pe gazdă la distanță, magia se întâmplă cu:

gazdă la distanță $ wget http://localhost:8080
pa4080 avatar
drapel cn
Răspuns bun! Aș adăuga și opțiunea `-T` care dezactivează alocarea pseudo-terminale la comanda `ssh`: `ssh -TNf ...`
Puncte:1
drapel cn

Iată o astfel de configurație de la unul dintre serverele pe care le întrețin. Configurația folosește serviciul systemd care este creat de partea clientului. De asemenea, folosește autossh, deci ca prim pas trebuie să-l instalăm.

sudo apt install autossh

Apoi creați fișierul de configurare SSH.

sudo nano /etc/ssh/ssh_config.d/auto-ssh-systemd-hosts.conf
Gazdă reverse.nume-server.com
    Nume gazdă 192.168.1.199
    IdentityFile /root/.ssh/server-name.com/id_rsa
    Utilizator Utilizator
    Portul 2222
    LocalForward 22 127.0.0.1:2222
    RemoteForward 2222 127.0.0.1:22
    GatewayPorts da
    Compresia da
  • Rețineți că cheia SSH este posesia utilizatorului root, deoarece va fi proprietarul serviciului.
  • Nu uitați să modificați parametrii Gazdă, Nume gazdă și IdentityFile.
  • Aici se presupune că serverul ssh de la ambele sisteme ascultă portul personalizat 2222.

În această etapă ar trebui să fiți capabil să:

sudo ssh reverse.server-name.com # sau
sudo autossh reverse.server-name.com

În sfârșit creați serviciul.

sudo nano /etc/systemd/system/autossh-reverse-server-name.service
[Unitate]
Description=Păstrează deschis un tunel SSH către „server-name.com”.
După=network-online.target

[Serviciu]
Utilizator=rădăcină
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" reverse.server-name.com
ExecStop=/usr/bin/killall -s KILL autossh
Restart=intotdeauna
RestartSec=3

[Instalare]
WantedBy=multi-user.target
  • A inlocui server-name.com și invers.nume-server.com cu valorile reale.

Acum activați și porniți serviciul.

sudo systemctl daemon-reload
sudo systemctl enable autossh-reverse-server-name.service
sudo systemctl start autossh-reverse-server-name.service

Pentru a opri și a dezactiva serviciul.

sudo systemctl stop autossh-reverse-server-name.service
sudo systemctl dezactivează autossh-reverse-server-name.service

Puteți obține starea sau reporniți serviciul prin următoarele comenzi.

sudo systemctl status autossh-reverse-server-name.service
sudo systemctl restart autossh-reverse-server-name.service

Serviciul va fi repornit automat dacă se blochează. Pe de altă parte autossh îl va ține în viață mult mai mult decât ssh, deoarece detectează automat și eșecurile conexiunii.

Referinte:


Odată pornit serviciul, ar trebui să puteți:

[email protected]:~$ ssh localhost -p 22 # conectați-vă la mașina locală
user@local-machine:~$ ssh localhost -p 22 # conectați-vă la server-name.com

Desigur, va trebui să furnizați date corecte de autentificare comenzilor.

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.