ssh tunneling question

nk eos at eos.gr
Fri Jul 6 21:27:20 EEST 2012


nk wrote:
> On 06/07/12 13:38, Nick Demou wrote:
>> καμιά φορά κάποιος φίλος με παίρνει τηλέφωνο και έχει πρόβλημα στο
>> Linux PC του. Για να συνδεθώ με VNC του ζητάω να τρέξει κάτι σαν αυτό:
>>
>> friends-pc>  ssh -N -R 11159:localhost:5900 my-server
>>
>> μετά μπορώ να συνδεθώ τρέχοντας από τον server μου έναν vnc client
>> προς το localhost:11159.  Nα και η αναπαράσταση του πως δρομολογείτε η
>> σύνδεση μου:
>>                                     ________
>>                                    /        \
>>                     ____          _\___      \
>>                    |    |~~~~~~~~|  \  |      \
>>           /`->11159:----:--------:--'  :5900<-'
>>           \        |    |~~~~~~~~|     |
>>            \   ,---<     |   ^    |     |
>>             \_/    |____|   |    |_____|
>>                  my-server  |   friends-pc
>>                             |
>>                         ssh tunnel
>>
>>
>> επειδή όμως ο server δεν έχει γραφικό περιβάλλον θέλω να τρέχω τον vnc
>> client από το PC μου το οποίο είναι στο ίδιο δίκτυο με τον server.
>> Αναρωτιόμουν λοιπόν αν υπάρχει τρόπος όταν δίνει ο φίλος μου την πρώτη
>> εντολή ssh να ακούει ο my-server όχι μονο στο localhost:11159 αλλά και
>> στο eth0:11159?
>>
>> Για την ώρα ξεπερνώ το εμπόδιο δια της πλαγίας οδού δημιουργώντας άλλο
>> ένα ssh-tunnel από το PC μου προς τον server [1] και μετά κάνω vnc
>> σύνδεση προς το localhost:11111 η οποία δρομολογείται στον
>> server:11159 η οποία με τη σειρά της δρομολογείται στο friends-pc
>> 5900... Με λίγα λόγια εν τέλη όλα λειτουργούν και τώρα _αλλά_ είναι
>> σκέτη σπαζοκεφαλιά και στα 42 μου προσπαθώ να αποφεύγω όσες
>> σπαζοκεφαλιές γίνεται.
>>
>> ν.
>> __________
>> [1] τρέχοντας στο PC μου πρώτα αυτό: ssh -L 11111:localhost:11159
>> my-server
>>
>
> δεν ειμαι απολυτα σιγουρος οτι εχω καταλαβει ακριβως την ερωτηση (ιδιως
> στο σημειο της αναγκης tunnel ως τον server/router σου, δεν σε
> μεταγλωτιζει εξ ορισμου οταν ζητας μια συνδεση προς τα εξω; σε κοβει ο
> firewall σου;). εν πασει περιπτωσει εγω χρησιμοποιω στο τηλεφωνο μου ενα
> scriptακι γι αυτες τις περιπτωσεις οπου δεν χρειαζεται ο remote χρηστης
> να τρεξει κατι - με την προϋποθεση οτι τρεχει εκει sshd και vncserver
> ανεξαρτητα λειτουργικου:
>
> -----
>
> #!/bin/bash
> echo
> # version 0.0.2
> echo please choose viewer
> echo "  1/p:  presence    2/r:  real  "
> read -t8 viewer
> if [ "$viewer" == "2" -o "$viewer" == "r" ]
> then vncclient=vncviewer ; else vncclient=presencevnc ; echo -e '\e[1;34m'
> echo n900´s Fn key IS NOT sticky within vnc screen  HOLD it DOWN to use
> echo -ne '\e[0;30m'
> sleep 2 ; fi
> echo
> echo do you need security? y/n
> read -t8 secure
> if [ "$secure" == "n" ] ; then $vncclient
> else
> echo please enter remote host to connect to
> echo "user at host:port"
> read -t36 remote
> echo
> uhost=`echo $remote | awk -F: '{print $1}'`
> rpo=`echo $remote | awk -F: '{print $2}'`
> if [ -z "$rpo" ] ; then rpo=5600
> elif [ $rpo -ge 0 -a $rpo -le 2048 ] ; then rpo=$((5600+$rpo)) ; fi
> lpo= ; for p in `seq 6 9` ; do if [ -z "$lpo" ] ; then
> if [ `netstat -nlt | grep [127,0]\.0\.0\.[0,1]:[1-9] \
> | grep -c \.[0,1]:596$p\ ` -eq 0 ] ; then lpo=596$p ; fi ; fi ; done
> if [ -z "$lpo" ] ; then echo
> echo '   weird !!   not available local port to bind to'
> echo '          blame me or check your system '
> sleep 2 ; echo '   ..giving up ..! ' ; echo
> sleep 4 ; exit ; fi
> #lpo= ; p=5960 ; until [ -n "$lpo" ] do
> #if [ `netstat -nlt | grep [127,0]\.0\.0\.[0,1]:[1-9] \
> #| grep -c \.[0,1]:$p\ ` -eq 0 ] ; then lpo=$p
> #else p=$((1+$p)) ; fi ; done
> ssh -o PreferredAuthentications=password \
> -C -f -t -x -L $lpo:localhost:$rpo $uhost sleep 44
> echo
> # echo $lpo:localhost:$rpo $uhost
> echo -e "connect to:  \e[0;35m localhost:$lpo \e[0;30m"
> echo ; echo
> sleep 4
> $vncclient
> fi
>
> -----
>
> ελπιζω να σου φανει χρησιμο με πιθανες αναγκαιες τροποποιησεις οπως στις
> πορτες που βλεπω πως προτιμας αλλες και στις εφαρμογες που χρησιμοποιεις
> ως clients
>
> θανκς
>
>

μαλιστα, διαβαζοντας με λιγο μεγαλυτερη ανεση καταλαβα τι ρωτας,
χρειαζεσαι μονο να αυτοματοποιησεις το κομματι απο το pc σου στο server 
σου κι αυτο γινεται με το εξης κομματι:

#!/bin/bash
ssh -o \
-C -f -t -x -L 11111:localhost:11159 my-server sleep 44
$vncclient localhost:11111


και να καλεις το script αντι για τον vncclient[1] σου
1: σου προτεινω tightvnc αν τρεχεις απο Linux ή ultravnc απο ms
αλλά αυτά είναι γούστα

θανκς



More information about the Linux-greek-users mailing list