Newsgroup: it.comp.os.linux.sys
Titolo: Ottenere una shell su di una macchina in una rete privata

Ciao, ho la necessità di controllare da remoto un macchina (che chiamo A)
che però si trova in una rete con indirizzi privati ed esce su internet con
il NAT.
Io ho a disposizione un IP pubblico su un altra macchina (che chiamo B)
fuori da quella rete e mi piacerebbe che la macchina A si collegasse,
magari ogni tot minuti, alla B offrendogli la possibilità di eseguire dei
comandi e restituendone l'output.
Esiste qualche software per fare ciò?
Ovviamente parlo di Linux e SL.
Grazie.
S

 comandi e restituendone l'output.
Se ho capito cosa vuoi fare, un tunnel con ssh potrebbe fare al caso tuo.
A = "server", B = "client"
dal server: ssh -f -N -R 10220:localhost:22 UtenteB@IndirizzoB
dal client: ssh -p 10220 UtenteA@localhost
Se A è lasciata a se stessa, l'autenticazione deve avvenire tramite 
chiavi, altrimenti ti chiederà la password dell'UtenteB.
SE&O.
-- 
|  Alessandro Giacomin [tenicoz]
|    "Sono una persona molto intelligente e brillante,
|    devo solo scoprire in quale campo."
|    ~, sweet ~

 Grazie.
Il modo piů elegante č metterli in VPN.
Per queste cose, openvon č ottimo.
Una volta messo in VPN, accedi con l'indirizzo della VPN e sei apposto.
Max


   Puoi eseguire il "forwarding" di una connessione lsh, ssh, telnet ecc. 
a livello di rete con iptables oppure a livello di sessione con xinetd.
   Esempio della prima soluzione:
Nelle tabelle del firewall del server si introducono le regole seguenti:
# I pacchetti provenienti dall'interfaccia con IP pubblico eth0
# diretti al servizio "ssh" sono rediretti al client sulla LAN:
iptables --table nat --append PREROUTING --destination $IP_PUBBLICO \
   --in-interface eth0 --protocol tcp --destination-port ssh \
   --jump DNAT --to-destination $LAN_IP
# I pacchetti provenienti dal client sulla LAN in uscita sull'interfaccia
# con IP pubblico (eth0) provenienti dal rervizio "ssh" sono riscritti con
# l'IP pubblico del server quale indirizzo di provenienza:
iptables --table nat --append POSTROUTING --source $LAN_IP \
   --out-interface eth0 --protocol tcp --source-port ssh --jump SNAT
   --to-source $IP_PUBBLICO
(eventualmente arricchisci con regole -m state --state NEW ...)
   Esempio della seconda soluzione:
Scrivi il seguente file in /etc/xinetd.d/ssh sul server che suppongo
abbia la riga seguente in /etc/xinetd.conf:
includedir      /etc/xinetd.d
service ssh
{
         socket_type     = stream
         protocol        = tcp
         wait            = no
	redirect	= $LAN_IP
}
   Volendo cambi la porta d'accesso al servizio per non entrare in
conflitto con il servizio ssh del server, se attivo: si puo` fare
facilmente sia con iptables che con xinetd.
   Cose di questo genere le ho fatte con iptables ma ancora non con xinetd,
anche se e` piu` facile.  Mi aspetto funzioni senza problemi, ma non
avendo esperienza non garantisco.
   Sandro
-- 
Alessandro Selli
http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.

 dal client: ssh -p 10220 UtenteA@localhost
Grazie Alessandro, preciso ed efficiente.
Grazie anche agli altri che hanno risposto.
Sal

> dal server: ssh -f -N -R 10220:localhost:22 UtenteB@IndirizzoB
ok.
Ma se non è d'avanti al Server come fa a dargli questo comando?

 Ma se non è d'avanti al Server come fa a dargli questo comando?
Uno script in cron?
Cmq questo comando va dato "una volta per tutte"; una volta che il 
tunnel è aperto non cade di sua spontanea volontà. Se dovesse cadere 
(magari perchè uno degli host si stacca da internet), lo scriptino ogni 
minuto controlla se occorre ritirare su il tunnel. Qualcosa tipo:
ps ax | grep -q UtenteB@IndirizzoB
if (($?)); then ssh etc. etc.; fi
SE&O
