Remote Desktop su ssh tunnel

Con i tunnels ssh è possibile trasportare sessioni TCP all’interno di connessioni criptate. Questo consente di raggiungere in sicurezza computer protetti da firewall o di utilizzare computer gate per raggiungere computer con le porte bloccate verso l’esterno.

Di seguito viene indicato come utilizzare un tunnel ssh per connettersi utilizzando il protocollo RDP ( Desktop Remote Protocol )  ad un Server Windows 2012 in Remote Desktop ( RDP ) da un computer Debian 9.xx .

Le connessioni RDP avvengono normalmente utilizzando la porta 3389.

Situazione

[ local machine] Debian 8.xx    ——–>  [ 182.193.135.162 ] gate CentOS 7.xx  ———–>  10.20.5.152 [ server di destinazione ] Windows Server 2012

  • pc gate  ip  rete interna  = 10.20.5.156  –  ip rete esterna = 182.193.135.162
  • Server Windows ip  rete interna  = 10.20.5.152  .- ip rete esterna assente o porta verso l’esterno bloccata

Come premesso per raggiungere il pc target  non esposto sulla rete è possibile passare per il gate Centos e grazie ad un tunnel ssh avere la porta remota 3389 sulla porta locale 33890  .

ssh -fNg  -L33890:10.20.5.156:3389 root5@182.193.135.162

-L porta-locale:host-remoto:port-remota  (-L  Local port forwarding )
-f ssh va in background (demonize)
-g permette al computer remoto di connettersi alle porte locali inoltrate
-q quiet mode. Molti warning e messaggi vengono soppressi
-N informa OpenSSH che non si intende eseguire un commando nel host remoto
-i  identity file
-v verbose

Usando certificato .pem  ( scritto in ascii e codificato base-64 con prefisso )

ssh -fNg -L33890:10.20.5.156:3389 root5@182.193.135.162 -i "~/.ssh/WebKeyPair.pem" 

 

a questo punto utilizzando rdesktop oppure remmina oppure KRDC sara possibile raggiungere il server Windows puntanto alla porta 127.0.0.1:33890

KRDC

 

Elencare e Terminare connessione ssh

Elencare le connessioni “ssh” attive.

1) ps

ps -afx | grep [s]sh     # preferibile

2 )  pgrep

 
pgrep -af ssh 
677 /usr/sbin/sshd -D
1234 /usr/bin/ssh-agent /usr/bin/im-launch x-session-manager
1580 ssh -fN -L 33895:10.30.2.125:3389 centos@118.134.238.166 -i ~/.ssh/CorpWebKeyPair.pem
1617 ssh -i ~/.ssh/CorpWebKeyPair.pem centos@118.134.238.166

3) netstat

netstat -anpt | grep -E "ssh"
 
netstat -anpl | grep  [s]sh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      677/sshd            
tcp        0      0 127.0.0.1:33895         0.0.0.0:*               LISTEN      1580/ssh            
tcp        0      0 192.168.5.89:33776      118.134.238.166:22       ESTABLISHED 1580/ssh            
tcp        0      0 127.0.0.1:33895         127.0.0.1:48294         ESTABLISHED 1580/ssh            
tcp        0      0 192.168.5.89:33780      118.134.238.166:22       ESTABLISHED 1617/ssh            
tcp6       0      0 :::22                   :::*                    LISTEN      677/sshd            
tcp6       0      0 ::1:33895               :::*                    LISTEN      1580/ssh            
unix  2      [ ACC ]     STREAM     LISTENING     20893    1234/ssh-agent       /tmp/ssh-cPUkJ3zPtqaw/agent.1179
unix  2      [ ACC ]     STREAM     LISTENING     22567    1163/systemd         /run/user/1000/gnupg/S.gpg-agent.ssh
unix  3      [ ]         STREAM     CONNECTED     14006    677/sshd   

 

per chiudere  una connessione ssh basta killare  il processo  individuato con   ps -afx | grep  [s]sh .

kill 6726   # se il processo è dell'utente     
o    
su
kill 6726   # va bene per tutti i processi

per chiudere tutti le connessioni ssh possiamo fare il “killall” di tutti i processi ssh

killall ssh

quindi per terminare con kill il processo ssh sulla porta 33895 ID 1580

kill 1580

Risorse:


			

ssh tunnel per accedere a servizi http, postgresql, samba in remoto

Con i tunnels ssh è possibile trasportare sessioni TCP all’interno di connessioni criptate.  In questo modo possiamo mettere in sicurezza comunicazioni che si svolgono in chiaro oppure raggiungere computers e/o servizi che sono posti dietro firewalls. In questo primo post i comandi per generare tunnels per accedere in sicurezza ai servizi http, postgresq, samba su computers remoti e i comandi per visualizzare e chiudere i processi ssh attivi.

Comininciamo con l’ elencare le connessioni “ssh” attive.
Per lanciare taluni comandi come root verrà utilizzato il comando sudo tipico di Ubuntu si può optare anche per passare a root con  sudo su.

sudo ps -afx | grep [s]sh     # preferibile

o

sudo netstat -anpt | grep -E "ssh"

per chiudere  una connessione ssh basta killare  il processo  indivudato con  sudo ps -afx | grep  [s]sh .

kill 6726   # se il processo è dell'utente     
o    
sudo kill 6726   # va bene per tutti i processi

per chiudere tutti le connessioni ssh possiamo fare il “killall” di tutti i processi ssh

sudo killall ssh

Tunnel ssh per accedere a un web server – http  port  80

1) Il computer remoto ospita un web server ma il suo firewall blocca la porta 80 la porta 22 è accessibile.
Effettuiamo una connessione ssh è utilizziamo un local port forwarding ( -L )  per navigare il web server del computer remoto.

ssh -fNgq root@192.168.1.9 -L 8080:localhost:80

-L porta-locale:host-remoto:port-remota  (-L  Local port forwarding )
-f ssh va in background (demonize)
-g permette al computer remoto di connettersi alle porte locali inoltrate
-q quiet mode. Molti warning e messaggi vengono soppressi
-N informa OpenSSH che non si intende eseguire un commando nel host remoto
-v verbose

quindi facciamo puntare il browser all’indirizzo 127.0.0.1:8080

2) Il firewall della nostra rete impedisce l’accesso a un sito specifico (es. http://www.inter.it) è disponibile tuttavia un computer raggiungibile via ssh che non ha questa limitazione. Possiamo utilizzare quest’ultimo computer (agirà da “gate”) per raggiungere il web server bloccato.

ssh -nFg  root@192.168.1.9  -L 8081:inter.it:80

o

 ssh -fN root@192.168.1.9 -L 8081:79.125.120.241:80   # host remoto specificato con IP

sempre -L (Local port forwarding) :  – L local-port-listen:remote-host:remote-port    192.168.1.9 ( gate )

Se il sito web utilizza rewriting potrebbero esserci poblemi nel visualizzare correttamente la pagina.

Tunnel ssh  per utilizzare un server postgresql remoto 

1)  utilizzare  postgresql in sicurezza utilizzando un tunnel ssh
[ local machine]    ——–>  [ 182.193.135.162 ]

ssh -fNg  pluto@182.193.135.162  -L54321:localhost:5432 
psql  -p 54321 postgres postgres

2) utilizzare  il server postgresql 10.0.1.49 passando per  gate
[local machine] ——–> [182.193.135.165 – gate] ———> [10.0.1.49: server postgresql- remote LAN]

ssh -fNg    -L54321:10.0.1.149:5432 root5@182.193.135.162 
psql -p 54321 -h 127.0.0.1 -U postgres

in pgadmin editiamo host= 127.0.0.1 e port= 54321

altro post  Tunnel via ssh per gestire il server postgresql con pgAdmin

Tunnel ssh per protocollo samba  – samba(smb)  porte 139 o 445

1)  creare un tunnel ssh per raggiungere dal pc ubuntu il serverr windows 2008 attraverso il gate centos
[ local-machine(ubuntu 12.04) ]  ——>  [ 28.93.35.65 gate (centos) ] ———>   [10.0.1.103: windows server 2008 ]

Prima di aprire il tunnel ssh fermare il service samba attivo nel pc locale con ubuntu

sudo service smbd  stop 

Dettagli su samba sono disponibili in Samba in debian squeeze e ubuntu linux via terminale.

Per aprire il tunnel sarebbe utile conoscere la porta. Comunque poichè in genere si tratta della porte 445 o 139  non resca che provare prima 445 e poi 139 .Apriamo il “ssh tunnel for samba( Local port forwarding )”

ssh -fNgq -L 139:10.0.1.103:139  user-centos@28.93.35.65

oppure

ssh -fNgq -L 445:10.0.1.103:445  user-centos@28.93.35.65

-L port-local:host-remote:port-remote  (-L  Local port forwarding )

Ora possiamo usare  nautilus o pcmanfs per gestire il  smb share  o smbclient oppure effettuare il  mount con smbmount.

Il file manager accederà alle cartelle del server windows remoto con un indirizzo di questo tipo

smb://127.0.0.1/dir-share-server

per utilizzare smbclient usiamo il comando:

smbclient --user=user-windows2008  //127.0.0.1/WWW

se tutto ok questo è il prompt atteso

 
:~$ smbclient --user=masterzyn //127.0.0.1/WWWe
Enter masterzyn's password: 
Domain=[HOSTxx-172-001] OS=[Windows Server 2008 R2 Standard 7601 Service Pack 1] Server=[Windows Server 2008 R2 Standard 6.1]
smb: \>

e per visualizzare le cartelle del server windows 2008 provare con:

 
smb: \> ls

possiamo anche montare le cartelle remote con smbmount
creiamo un mount point (ex. /mnt/smb3)  and then we have to use smbmount to do the mounting

sudo mkdir /mnt/smb3

sudo smbmount //127.0.0.1/WWW /mnt/smb3   -o username=user-window2008

Terminare connessione ssh

Elencare le connessioni ssh attive con pgrep

 
sudo pgrep -lf ssh 
807 /usr/sbin/sshd -D
1848 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session /usr/bin/startlubuntu
1857 /usr/bin/gnome-keyring-daemon --start --components=ssh
20895 ssh -fNgq -L 54320:localhost:5432 root@28.93.35.65
22493 ssh -fNgq -C -L 54321:localhost:5432 root@28.93.35.66

oppure con netstat

 
sudo netstat -anpl | grep  [s]sh
[sudo] password for maurizio: 
tcp        0      0 0.0.0.0:54320           0.0.0.0:*               LISTEN      20895/ssh       
tcp        0      0 0.0.0.0:54321           0.0.0.0:*               LISTEN      20900/ssh       
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      807/sshd        
tcp        0      0 127.0.0.1:54321         127.0.0.1:55211         ESTABLISHED 20900/ssh       
tcp        0      0 127.0.0.1:54320         127.0.0.1:49669         ESTABLISHED 20895/ssh       
tcp        0      0 192.168.1.6:57730     182.93.35.161:22        ESTABLISHED 20895/ssh       
tcp        0      0 127.0.0.1:54320         127.0.0.1:49667         ESTABLISHED 20895/ssh       
tcp        0      0 127.0.0.1:54320         127.0.0.1:49668         ESTABLISHED 20895/ssh       
tcp        0      0 127.0.0.1:54321         127.0.0.1:55210         ESTABLISHED 20900/ssh       
tcp        0      0 127.0.0.1:54321         127.0.0.1:55206         ESTABLISHED 20900/ssh       
tcp        0      0 192.168.1.6:58023     182.93.35.162:22        ESTABLISHED 20900/ssh       
tcp6       0      0 :::54320                :::*                    LISTEN      20895/ssh       
tcp6       0      0 :::54321                :::*                    LISTEN      20900/ssh       
tcp6       0      0 :::22                   :::*                    LISTEN      807/sshd        
unix  2      [ ACC ]     STREAM     LISTENING     11001    1848/ssh-agent      /tmp/ssh-r7iPA7SsOYBY/agent.1811
unix  2      [ ACC ]     STREAM     LISTENING     11889    1857/gnome-keyring- /run/user/maurizio/keyring-Y

quindi per terminare con kill il processo ssh sulla porta 54321 ID 20900

sudo kill 20900

Risorse: