SSH, VNC, SSHFS, NFS, SFTP, etc.

Table des matières   Liens internes à cette page

1) Introduction
2) SSH, prise de contrôle en mode texte.
3) x11VNC, prendre le contrôle à travers le réseau
4) tightVNC, Virtual Network Computing (VNC)
5) Résumé des actions à faire pour la connexion locale
6) Résumé des actions à faire pour la connexion à travers Internet
7) Raspberry pi et pcduino
8) SSHFS : SSH File System
9) NFS Network File System
10) Aide à distance à travers Internet

1) Introduction   Top

Tout ce qui suit concerne le système d'exploitation GNU/Linux Ubuntu avec KDE.
Le but de cette page est de donner des informations sur des manières de prendre contrôle d'un ordinateur depuis un autre (SSH, VNC) ou sur une manière d'utiliser le réseau pour partager des fichiers (SSHFS, NFS, SFTP).
J'expliquerai comment prendre contrôle et partager à travers le réseau local, et à travers le réseau public (Internet).
Je ne suis pas un spécialiste, j'ai juste fait des essais et lu beaucoup de documentation.
Il existe d'autres logiciels de prises de contrôle, tels que "Veyon", qui est utilisé dans des classes.
J'utiliserai la terminologie classique :
Le serveur est l'ordinateur dont on prendra le contrôle, et celui dont on accédera aux fichiers. Par exemple le Raspberry pi.
Le client est l'ordinateur qui prendra contrôle de l'ordinateur "serveur" et qui lira les fichiers se trouvant sur l'autre ordinateur. On travaille sur l'ordinateur "client" et accède à l'ordinateur "serveur" à travers le réseau.
J'écrirai "serveur" et "client" au lieu de "ordinateur serveur" et "ordinateur client".

2) SSH, prise de contrôle en mode texte.   Top

SSH signifie "Secure Shell", sert à avoir une connexion à distance sécurisée.
Le protocole et logiciel SSH permet facilement de prendre contrôle d'un ordinateur distant, en réseau local ou en réseau public.

Installation

Sur le serveur, dans un Terminal, taper :
sudo apt-get update
sudo apt-get install ssh
sudo apt-get install nmap net-tools
La première ligne met à jour la liste des dépôts de logiciels.
La deuxième ligne installe le logiciel et le protocole SSH.
La troisième ligne install des utilitaires de gestion du réseau.

Sur le client, dans un Terminal, taper :
sudo apt-get update
sudo apt-get install nmap net-tools
Apparemment, le logiciel "ssh" client est installé par défaut.

Si l'installation a déjà été faites, l'instruction ci-dessus (sur fond blanc) n'aura pas d'influence, cela sera indiqué dans le Terminal.
On peut aussi utiliser le gestionnaire de paquet "Synaptic" pour ces installations.

Cas où la connexion est locale.

C'est le cas si le serveur et le client sont connectés au même routeur.
Sur le serveur et le client, dans un Terminal tapez :
ifconfig
Dans l'ensemble des lignes obtenues, une ligne devrait commencer par "inet" suivit d'un numéro du genre :
192.168.xxx.xxx   ou 172.16.0.101
Les "xxx" représentent des nombres.
Si le début est le même sur le serveur et le client, alors ils sont reliés au même routeur. Ils sont sur le même réseau local.
On peut aussi taper
hostname -I

Sur le client, dans un Terminal tapez :
nmap 192.168.xxx.*   ou
nmap 172.16.0.*   ou
sudo arp-scan -l   Si pas déjà fait une fois, tapez : sudo apt-get install arp-scan
Le numéro dépend de ce que vous avez obtenu avec "ifconfig".
Cela donnera tous les numéros ip locaux des appareils qui sont connectés sur ce réseau local.
Il y en aura probablement un avec le numéro : 192.168.xxx.1 (ou 172.16.0.1) qui sera le modem lui-même. Ce numéro sera utile pour la configuration dans le cas où la connexion se fait à travers Internet.

Pour établir la connexion et prendre contrôle du serveur, dans un Terminal du client, taper :
ssh 192.168.xxx.xxx -l pi   ou
ssh pi@172.16.0.101
Le numéro (192.168.xxx.xxx) ou (172.16.0.101) est celui du serveur
le nom "pi" est celui de l'utilisateur du serveur.
Si vous ne le connaissez pas, depuis le terminal client, tapez :
echo $USER
Il n'y a plus qu'à taper le mot de passe de l'utilisateur du serveur.
Le Terminal sur le client est devenu un Terminal du serveur.
Pour vérifier, tapez "ifconfig" et le numéro ip local du serveur devrait apparaître.
On travaille ainsi depuis le client sur le serveur !

Pour fermer la connexion, dans le Terminal taper :
exit

Cas où la connexion est à travers Internet.

C'est plus compliqué, car le modem-routeur transforme une adresse ip publique en adresse ip locale et peut accéder à plusieurs ordinateurs locaux.

Pour la configuration, vous devez pouvoir accéder au modem-routeur et ne pas avoir peur de modifier certains de ses paramètres.
Comme il y a différent "routeurs", les explications ci-dessous devront être adaptée à votre routeur.
Chez moi, j'ai même deux routeurs qui se suivent, j'ai donc dû configurer les deux.

Configuration du modem-routeur
Depuis le client (serveur aussi possible), taper :
nmap 172.16.0.*
"172.16.xxx" est le début de l'ip locale du client.
Vous obtenez une liste d'adresse ip locales. L'une d'entre elles correspond à l'adresse de votre routeur. Elle est généralement de la forme 172.16.0.1, ou plus souvent de la forme 192.168.xxx.1.
Depuis un navigateur, firefox par exemple, taper dans l'URL (adresse Internet) :
172.16.0.1
"172.16.0.1" doit être l'adresse de votre routeur.
Une fenêtre d'authentification s'ouvre, avec la demande d'un nom utilisateur et d'un mot de passe.
Vous devriez les avoir dans votre documentation concernant le routeur.
Souvent, l'utilisateur est "admin".
Souvent le mot de passe est "admin" ou "1234" ou "password".

On arrive dans une fenêtre de configuration du routeur.
Il faut aller dans un mode avancé et dans Port Forwarding / Port Triggering.
On veut faire un "Port Forwarding".
port_forwarding
Chez moi, je dois taper l'adresse ip locale de mon serveur et cliquer sur Add.
Ensuite, je dois sélectionner le service ajouté et cliquer sur Edit Service.
Je dois changer son : "service name", avec un nom de mon choix, qui indique à quoi il correspond.
Le "Service Type" : TCP/UDP, je crois que TCP est important.
"Starting Port", j'ai choisi "5904".
"Ending Port", j'ai choisi "5904" aussi.
"Server IP Adress : "172.16.0.101" est celui du serveur, déjà tapé en principe.
C'est tout, vous pouvez cliquer sur Logout.
Tout cela sert à indiquer au routeur que si un paquet (message) arrive depuis Internet (avec l'IP public), sur le port 5904, ce paquet doit être redirigé sur l'ordinateur local ayant l'IP local "172.16.0.101".

Il faut encore modifier le fichier "/etc/ssh/sshd_config" du serveur. Depuis un Terminal sur le serveur, tapez :
sudo nano /etc/ssh/sshd_config
"nano" peut être remplacé par "gedit", "leafpad", "geany" ou n'importe quel éditeur de texte.
On peut aussi taper sudo mc pour rester en mode texte, ce qui peut être très utile.
Il faudra changer la ligne : #Port 22 qui est en commentaire, en Port 5904, qui n'est plus en commentaire.
Il faut ensuite redémarrer le serveur.
Le numéro "5904" est le numéro de port défini dans le routeur, comme expliqué ci-dessus.

Tout cela ne doit être fait qu'une seule fois, ensuite c'est similaire à une connexion locale.

Il manque encore l'information de l'IP public sur lequel le serveur est connecté.
Depuis le serveur, cliquez sur un des liens ci-dessous pour connaître cet IP public du serveur.
Mon-ip en php
Mon-ip.com
checkip.org
Notez ce numéro. Chez moi c'est : 85.3.xxx.xxx
"xxx.xxx" sont deux nombres qui changent parfois.
curl ifconfig.me   permet de connaître l'IP public depuis un terminal.
curl ifconfig.me/all   donne plus d'info. https://ifconfig.me/ permet de voir l'info dans une page Web.

Pour établir la connexion et prendre contrôle à travers Internet du serveur, dans un Terminal du client, taper :
ssh pi@85.3.xxx.xxx -p 5904
Le numéro "85.3.xxx.xxx" est celui de l'IP public du serveur
le nom "pi" est celui de l'utilisateur du serveur.
Si vous ne le connaissez pas, depuis le terminal client, tapez :
echo $USER
Il n'y a plus qu'à taper le mot de passe de l'utilisateur du serveur.
Le Terminal sur le client est devenu un Terminal du serveur.
Pour vérifier, tapez "ifconfig" et le numéro ip local du serveur devrait apparaître.
On travaille ainsi depuis le client sur le serveur à travers Internet !

Suppléments

Chez moi, vu que j'ai fait une redirection de ports pour ssh, même en local, je dois taper :
ssh pi@172.16.0.101 -p 5904

La commande suivante permet d'exécuter depuis le Terminal, une application du GUI (Graphical User Interface) tel que "Dolphin" ou "Nautilus" ou "firefox".
ssh -X pi@172.16.0.101 -p 5904
Par exemple, en tapant depuis le Terminal :
firefox
On exécute le programme serveur "Firefox" dans une fenêtre graphique.

Dans le cas où la même adresse IP locale est utilisée par un autre ordinateur du côté du serveur, il faut taper (du côté du client) :
ssh-keygen -f "/home/pi/.ssh/known_hosts" -R "172.16.0.101"
"172.16.0.101" est l'IP locale du serveur.
Ensuite, lors d'une reconnexion ssh depuis le client, il faudra confirmer que l'on génère une nouvelle clé de cryptage.

Puisqu'on est en mode texte, j'aime bien avoir un gestionnaire de fichiers en mode texte, qui est visuel, il s'agit de midnight commander.
Vous pouvez l'installer sur le serveur, depuis le client en tapant dans le terminal :
sudo apt-get install mc
Pour l'exécuter, il suffit de taper mc.
Pour modifier des fichiers systèmes, on peut l'exécuter en mode super utilisateur (root) : sudo mc.


Voici encore une commande qui permet de trouver les IP locaux des appareils reliés au même routeur que votre ordinateur :
sudo apt-get install arp-scan
sudo arp-scan -l
La première ligne installe le logiciel "arp-scan".
La deuxième ligne exécute le programme et vous indique les IP locaux des appareils reliés au même routeur que votre ordinateur.

On peut copier des fichiers du serveur vers le client et inversement.
Deux logiciels standards existent pour cela :
scp pour une copie de fichiers, similaire à la commande "cp".
sftp pour un transfert de plusieurs fichiers, similaire à la commande "ftp".
Une très bonne information est donné sur le site Web de "doc.ubuntu-fr.org" : ssh, scp, sftp

Pour copier un fichier "aaa.txt" du client dans un fichier "bbb.txt" sur le serveur, depuis le Terminal tapez (côté client) :
scp aaa.txt   pi@172.16.0.101/home/pi/bbb.txt   ou
scp -P 5904 aaa.txt   pi@172.16.0.101:/home/pi/bbb.txt
"pi" est le nom de l'utilisateur sur le serveur.
"172.16.0.101" est l'ip local du serveur.
"/home/pi/" est le répertoire serveur où le fichier bbb.txt sera créé.
L'option "-P 5904" est nécessaire si une redirection de port a été faite.
Le mot de passe de l'utilisateur serveur doit être tapé.

Pour copier un fichier "aaa.txt" du serveur dans un fichier "bbb.txt" sur le client, depuis le Terminal tapez (côté client) :
scp pi@172.16.0.101/home/pi/aaa.txt   bbb.txt   ou
scp -P 5904 pi@172.16.0.101/home/pi/aaa.txt   bbb.txt
"pi" est le nom de l'utilisateur sur le serveur.
"172.16.0.101" est l'ip local du serveur.
"/home/pi/" est le répertoire serveur d'où le fichier aaa.txt est copié.
L'option "-P 5904" est nécessaire si une redirection de port a été faite.
Le mot de passe de l'utilisateur serveur doit être tapé.

Pour ne pas devoir retaper le mot de passe à chaque fois, installer sshpass (sudo apt-get install sshpass)

Pour copier un fichier "aaa.txt" du serveur dans un fichier "bbb.txt" sur le client, depuis le Terminal tapez (côté client) :
sshpass -p "passserver" scp -P 5904 pi@172.16.0.101/home/pi/aaa.txt   bbb.txt

Pour copier un fichier "aaa.txt" du client dans un fichier "bbb.txt" sur le serveur, depuis le Terminal tapez (côté client) :
sshpass -p "passserver" scp -P 5904 aaa.txt   pi@172.16.0.101/home/pi/bbb.txt

Utilisation de sftp depuis Dolphin pour accéder aux fichiers du serveur.
Depuis Dolphin, dans le volet de gauche, aller sur "Réseau", puis double cliquer sur "Ajouter un dossier réseau".
Sélectionner "Shell sécurisé (ssh)", puis cliquer sur "Suivant".
La fenêtre suivant s'ouvre, qu'il faut remplir :
dolphin_sftp

On peut aussi faire un clique droit dans la partie basse du volet de gauche et sélectionner : "Ajouter un élément...", puis taper :
Le nom que vous désirez pour "l'Intitulé"
"sftp://pi:motdepass@172.16.0.101:22/home/pi
"pi" est le nom de l'utilisateur du serveur.
":motdepasse" est celui de l'utilisateur (pi) du serveur. Il n'est pas obligatoire et sera demandé s'il n'est pas indiqué ici.
"172.16.0.101" est l'adresse ip local du serveur.
"22" est le port par défaut pour le ssh. Moi j'utilise le port 5904 pour le ssh, comme indiqué plus haut dans la connexion à travers Internet.
"/home/pi" est le répertoire du serveur que l'on désire accéder.


3) x11VNC, prendre le contrôle à travers le réseau   Top

VNC signifie Virtual Network Computing
Ce protocole et les logiciels correspondants permettent de prendre contrôle d'un "serveur" depuis un "client".
Cette partie sera moins détaillée que la partie concernant "SSH", à laquelle il est bon de se référer.

Installation

Sur le serveur, dans un Terminal, taper :
sudo apt-get update
sudo apt-get install x11vnc
Ceci install le serveur VNC sur l'ordinateur "serveur".

Sur le client, dans un Terminal, taper :
sudo apt-get update
sudo apt-get install gvncviewer
sudo apt-get install xtightvncviewer
gvncviewer installe le logiciel permettant de prendre contrôle du serveur depuis le client, ceci en mode graphique. Exécuté par :"gvncviewer 172.16.0.101:0"
vncviewer installe le logiciel permettant de prendre contrôle du serveur depuis le client, ceci en mode text. Exécuté par :"vncviewer 172.16.0.101:0"
KRDC est un logiciel installé sous KUbuntu 18.04, dans le menu "Internet" qui permet aussi la connexion en mode graphique. S'il n'est pas installé par défaut, l'installer avec "sudo apt install krdc".

Cas où la connexion est locale.

C'est le cas si le serveur et le client sont connectés au même routeur.
Sur le serveur, dans un Terminal tapez :
ifconfig
x11vnc -passwd mypass -display :0
"ifconfig" sert à connaître l'adresse IP local du serveur.
"mypass" est un mot de passe arbitraire, qui sera utilisé par le client.
Beaucoup de lignes s'affichent. Quelque part il est indiqué le numéro d'affichage "display" utilisé. C'est généralement "0", mais cela peut être "1" ou "2".
Le port utilisé est aussi indiqué.
Si on utilise ssh, cette commande peut être tapée dans le Terminal qui se trouve chez le client, mais qui commande le serveur !

Sur le client, ouvrez un autre Terminal, qui sera donc local au client. Dans ce Terminal tapez :
gvncviewer 172.16.0.101:0
"172.16.0.101" est l'adresse IP locale du serveur.
Dans de nombreux cas, cette adresse est plutôt : "192.168.xxx.xxx".
":0" peut être parfois ":1" ou ":2" suivant le "display" utilisé par le serveur.
Une fenêtre s'ouvre, demandant le mot de passe défini par le serveur. "mypass" dans l'exemple ci-dessus.

Si tout c'est bien passé (ce qui n'arrive jamais la première fois (:-( ), une fenêtre s'ouvre chez les clients, affichant l'écran du serveur. Si vous modifiez quelque chose dans la fenêtre chez le client, vous voyez la même modification sur l'écran du serveur.

En fermant la fenêtre chez le client, vous fermez cette communication.

Au lieu d'utiliser "gvncviewer" on peut utiliser depuis le client :
vncviewer 172.16.0.101:0

Cas où la connexion est à travers Internet.

En se référant à la partie concernant SSH, indiquée plus haut, Il faut avoir :
° fait les modifications du router
° modifié le fichier "/etc/ssh/sshd_config" du serveur
° noté l'adresse IP public (85.3.xxx.xxx)

Comme pour la connexion locale, sur le serveur, dans un Terminal tapez :
x11vnc -passwd mypass -display :0
Je fais cela depuis le Terminal se trouvant chez le client, qui commande le serveur.

Sur le client, ouvrez un autre Terminal, qui sera donc local au client. Dans ce Terminal tapez :
gvncviewer 85.3.xxx.xxx:0
"85.3.xxx.xxx" est l'adresse IP public du serveur. Il faut l'avoir noté avant de quitter le serveur.
":0" peut être parfois ":1" ou ":2" suivant le "display" utilisé par le serveur.
Une fenêtre s'ouvre, demandant le mot de passe défini par le serveur. "mypass" dans l'exemple ci-dessus.

Si on a oublié de noter l'adresse IP public du serveur , Je ne vois pas comment on pourrait s'y connecter, désolé.

Suppléments

Voici quelques références que j'ai utilisées pour comprendre ce que j'explique ici :
Prenez VRAIMENT la main à distance sur votre Raspberry Pi avec x11VNC
SSH port forwarding
x11vnc : contrôler un ordinateur à distance du site ubuntu-fr
Chapter 13. scp, sftp et les tunnels avec ssh. De "linux-france.org", des explications sur le ssh.
Un énorme Tutoriel sur les serveurs, de "linux-france.org
x11vnc alternatives, indique plusieurs alternatives au logiciel x11vnc.

Quelques remarques :
1) Si vous tapez dans le Terminal contrôlant le serveur : sudo reboot   ou   sudo shutdown -r now, le serveur redémarre.
Cela prend quelques dizaines de secondes. Après ce redémarrage, vous pouvez vous reconnecter avec ssh.
2) Le ":0" peut être un ":1" ou ":2", suivant ce que la connexion "ssh" vous a indiqué.
En principe pour prendre contrôle, il faut que ce soit une ":0".
3) Si vous êtes fatigué de devoir taper le mot de passe avec vncviewer, voici une solution :
créer un fichier "pass.txt" contenant votre mot de passe "monpassword".   Tapez :
vncviewer 185.3.xxx.xxx:0 -autopass < pass.txt
4) x11vnc -passwd monpassword -display :0 -geometry 1280x720 permet de définir la taille qu'aura l'écran une fois que le client se sera connecté avec vncviewer. Ce n'est donc pas le client qui choisi la taille de la fenêtre qui représentera l'écran du serveur, mais c'est le serveur lui-même.
5) Si on a changé de serveur, branché sur la même adresse IP locale, il faut effacer une signature, qui est stockée dans $HOME/.ssh/known_hosts
On peut taper : ssh-keygen -f "$HOME/.ssh/known_hosts" -R 172.16.0.101
172.16.0.101 doit être l'adresse IP du serveur.
6) En tapant ssh -X 172.16.0.2 -l pi il y a la possibilité d'exécuter des applications graphiques depuis le terminal.
Par exemple, en tapant cheese cela lance une fenêtre graphique qui montre sur votre écran ce que voit la Webcam.
Il faut avoir installé "cheese" sudo apt install cheese
7) Pour des raisons de sécurités, VNC s'arrête s'il y a une rupture de connexion. (déconnexion)
Pour résoudre simplement le problème pour un Raspberry pi, voir 7b) ci-dessous.
On peut changer ce comportement par défaut en ajoutant l'option -forever.
Toutes les options de x11vnc.
Autre lien avec les options de x11vnc.

Le problème vient aussi de la version de x11vnc.
Le message d'erreur lors de la déconnexion est : stack smashing detected
En cherchant : stack smashing detected x1vnc, on trouve une solution qui a fonctionné pour moi.
c.f. mangoliou/x11vnc-stack-smashing-detected-solution.mk.
Voici ce qu'il faut taper dans un Terminal. Cela prend du temps, mais cela a fonctionné chez moi.
   # Install x-related to compile x11vnc from source code.
sudo apt-get update 
sudo apt-get install -y libxtst-dev libssl-dev libjpeg-dev

# Adjonction de ma part, pour que l'installation se fait dans le répertoire Temp
cd Temp  

# Grep source code.
wget http://x11vnc.sourceforge.net/dev/x11vnc-0.9.14-dev.tar.gz
gzip -dc x11vnc-0.9.14-dev.tar.gz | tar -xvf -
cd x11vnc-0.9.14/
./configure --prefix=/usr/local CFLAGS='-g -O2 -fno-stack-protector -Wall'

# Make and Make install.
make
make install

# Grep lighdm auth file.   Je n'ai pas fait
ps wwwwaux | grep auth

# Run x11vnc.  Je n'ai pas fait
/usr/local/bin/x11vnc -auth /var/run/lightdm/root/:0 -display :0 -xkb -forever -shared -rfbport 20000

# Use the chrome vnc client. Login Ubuntu and press ESC. Problems solved.
  
Chez moi, l'installation c'est faite dans : /home/pi/Temp/x11vnc-0.9.14/x11vnc/
Allez dans ce dossier en tapant depuis le serveur :
cd /home/pi/Temp/x11vnc-0.9.14/x11vnc/
Pour vérifier, taper :
./x11vnc -version
Il me donne le résultat : "x11vnc: 0.9.14 lastmod: 2013-11-21"
Pour exécuter la version qui vient d'être compilée, taper côté serveur :
./x11vnc -passwd monmot -forever -display :0
Depuis un Terminal du client (qui prend contrôle du serveur = le Raspberry pi) :
vncviewer 172.16.0.101:1
pass = monmot
Le ":1" peut changer en ":0" ou ":2" parfois.
7b) Pour éviter des manipulations décrites ci-dessus, je mets à disposition le fichier x11vnc que j'ai obtenu en le compilant sous Raspbian sur un Raspberry pi.
Personnellement, j'ai créé un dossier "Apps" sous /home/pi/ (le serveur, qui est le Raspberry pi).
J'ai copié le fichier x11vnc dans ce dossier.
Pour tester sa version, dans un Terminal du serveur, étant dans le dossier Apps, taper :
./x11vnc -version
Il me donne le résultat : "x11vnc: 0.9.14 lastmod: 2013-11-21"
Pour l'exécuter depuis le répertoire maison "/home/pi", du serveur :
Apps/x11vnc -passwd unmot -forever -display :0
Depuis le client, tapez :
vncviewer 172.16.0.101:0
172.16.0.101   est l'IP du serveur (le Raspberry pi)
:0   doit parfois être changé en :1 ou :2
Password = unmot
Taper : "Ctrl+C" dans le Terminal du client, ferme la fenêtre graphique où l'on voit le serveur.
On peut l'ouvrir à nouveau en retapant : vncviewer 172.16.0.101:0
Côté serveur :
sudo shutdown now
Permet d'éteindre le serveur (Raspberry pi).
Il sera éteint, on doit l'avoir à disposition pour l'enclencher de nouveau.
sudo reboot
Permet de redémarrer le serveur (Raspberry pi).
On pourra reprendre le contrôle à distance grâce à "ssh" comme décrit précédemment.
8) Pour ouvrir des ports, voici des informations.
9) Pour définir le port utilisé par x11vnc :
x11vnc -passwd monmot -forever -rfbport 5904 -display :0
10) Pour associer plusieurs ports au ssh et pour configurer le firewall : simplified.guide/ssh/run-multiple-ports.


4) tightVNC, Virtual Network Computing (VNC)   Top

Au lieu de x11vnc, on peut vouloir installer tightvnc, que je trouve moins bien. Mais j'en parle ici, car j'ai commencé mes essais avec lui et j'ai déjà écrit quelques lignes le concernant.

Pour installer tightvnc sur le serveur, taper :
sudo apt-get update
sudo apt-get install tightvncserver
Il faudra choisir un mot de passe, qui sera utile lors de la connexion graphique.

Pour installer tightvnc sur le client, taper :
sudo apt-get update
sudo apt-get install tightvncviewer

Dans un terminal serveur, taper :
tightvncserver
C'est une commande qui est donc lancée sur le serveur. Elle peut être tapée directement sur le serveur, ou depuis le Terminal qui s'est connecté par "ssh" précédemment.
Normalement, quelques lignes de réponses arrivent, avec la ligne :
"Log file is /home/pi/.vnc/pi:1.log"
Le ":1" est important pour la suite et pourrait être un :2 ou :3

Depuis un autre Terminal du client, tapez :
xtightvncviewer
Il faut taper l'adresse IP que vous aviez obtenu du serveur et que vous avez déjà utilisé une fois, exemple :
172.16.0.101:1
Le ":1" est important, cela peut être un ":2" ou ":3".

Si tout c'est bien passé, une fenêtre s'ouvre, avec l'écran du serveur.
Cela m'a pris des heures avant que tout fonctionne, il y a beaucoup de fausses informations sur le Web et des informations dépassées. Beaucoup de détails comptent, comme le "-l pi" et le ":1"
Un site important est celui de raspberry pi sur le Remote-access, Mais en le suivant, cela n'a pas fonctionné chez moi. En particulier, ils indiquent d'installer "realvnc-vnc-server", qui n'a pas fonctionné chez moi. J'ai donc préféré "tightvncserver".
lien sur la page précédente du "remote-access"
XVNC de doc.Ubuntu-fr.org
Doc sur tightvnc.com
VNC CONNECT realVNC, pour connexion à travers Internet.

L'essentiel de ce qui précède, je l'ai appris sur la vidéo suivante :
Remotely Access a Raspberry Pi Desktop from MAC OSX with VNC.
Très utile pour contrôler un Raspberry pi depuis un autre ordinateur.
En particulier, on peut voir l'écran du Raspberry pi sur l'écran de l'ordinateur principal et ainsi on peut enregistrer l'écran, sans devoir le filmer. La qualité de la vidéo est ainsi bien meilleure.

Quelques informations supplémentaires :
1) Dans le terminal qui est connecté par "ssh" au serveur, on peut fermer la connexion en tapant :
tightvncserver -kill :1
2) On peut changer la taille de la fenêtre graphique de connexion au serveur, avant la connexion graphique, en tapant dans le terminal ouvert en ssh :
tightvncserver -geometry 1600x1200
3) Le curseur par défaut est une croix, ce qui m'a déplu et pris deux heures à modifier.
Une fois que toute connexion est arrêtée, depuis le serveur, il faut éditer le fichier qui se trouve dans /home/pi/.vnc et qui s'appelle xstartup
Le dossier en question (.vnc) est un dossier caché, comme tous les dossiers qui commencent par un "."
Depuis le gestionnaire de fichiers, dans le menu "Voir", on peut demander d'afficher les fichiers cachés Ctrl+H
Un clique droit sur "xstartup" permet de l'ouvrir dans un éditeur de textes. Voici les lignes que j'ai :
#!bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey -cursor_name left_ptr
...
/etc/X11/Xsession
Les "..." sont des lignes que je n'ai par recopiées.
La partie -cursor_name left_ptr a été ajoutée par moi-même.
Elle permet de modifier le curseur de base. Ci-dessous, il y a d'autres curseurs possibles.
man xsetroot donne des informations.
J'ai également modifié le fichier : "/etc/vnc/xstartup"
Pour cela, il faut l'éditer en mode super-utilisateur. Sur le serveur, dans un Terminal, j'ai tapé : sudo gedit, mais "sudo geany" ou "sudo" un autre éditeur de texte est bon aussi. J'ai ensuite ouvert le fichier "/etc/vnc/xstartup" et fait la même adjonction qu'indiqué plus haut, j'ai ajouté "-cursor_name left_ptr" après "xsetroot -solid grey".
Je ne suis pas sûr que cela était nécessaire, mais après deux heures d'essai, j'étais content d'avoir un curseur en forme de flèche. Il reste un "petit point" au bout du curseur, mais je m'en accommode.
xsetroot -cursor_name draped_box
xsetroot -cursor_name hand1
xsetroot -cursor_name hand2
xsetroot -cursor_name iron_cross
xsetroot -cursor_name left_ptr
xsetroot -cursor_name plus
xsetroot -cursor_name top_left_arrow
xsetroot -cursor_name watch
c.f. /usr/include/X11/cursorfont.h   ??? je n'ai pas trouvé chez moi.

5) Résumé des actions à faire pour la connexion locale   Top

1) Sur le serveur il suffit de le démarrer.
Tout le reste se fait depuis le client.
2) Sur le client, dans un Terminal taper : ssh pi@172.16.0.101   ou
2') Sur le client, dans un Terminal taper : ssh 172.16.0.101 -l pi -p 5904
"172.16.0.101" est à adapter selon votre cas.
"-p 5904" si le port du serveur a été redirigé.
3) Tapez le mot de passe de l'utilisateur "pi" du serveur.
4) Taper : x11vnc -passwd monpassword -display :0
"monpassword" est un mot de passe de votre choix.
5) Sur le client, dans un autre Terminal, taper : gvncviewer 172.16.0.101:0
"172.16.0.101" est à adapter selon votre cas.
6) Entré le mot de passe défini ci-dessus. "monpassword" dans cet exemple.
Vous contrôlez votre serveur à distance !
°) Si le mot de passe est enregistré dans le fichier "pass.txt" :
vncviewer 172.16.0.101:0 -autopass < pass.txt
7) En tapant ssh -X pi@172.16.0.101 il y a la possibilité d'exécuter des applications graphiques depuis le terminal.
Par exemple, en tapant cheese cela lance une fenêtre graphique qui montre sur votre écran ce que voit la Webcam.
Il faut avoir installé "cheese" sudo apt install cheese

Puisqu'il suffit de démarrer le serveur, sans rien faire d'autre de son côté,
il n'est donc plus nécessaire d'avoir ni un écran, ni un clavier ni une souris connectés au serveur !

6) Résumé des actions à faire pour la connexion à travers Internet   Top

1) Sur le serveur, il suffit de le démarrer.
Tout le reste se fait depuis le client.
2) Sur le client, dans un Terminal taper : ssh pi@185.3.xxx.xxx -p 5904
"185.3.xxx.xxx" est à adapter selon votre cas.
5904 est le port du Raspberry pi redirigé.
3) Tapez le mot de passe de l'utilisateur du serveur.
4) Taper : x11vnc -passwd monpassword -display :0
"monpassword" est un mot de passe de votre choix.
5) Sur le client, dans un autre Terminal, taper : gvncviewer 185.3.xxx.xxx:0
"185.3.xxx.xxx" est à adapter selon votre cas.
6) Entré le mot de passe défini ci-dessus. "monpassword" dans cet exemple.
Vous contrôlez votre serveur à distance !

7) Raspberry pi et pcduino   Top

Tout ce qui précède est valable pour commander un Raspberry pi et un pcduino à travers un réseau.
L'un comme l'autre fera office de serveur.
Cela permet d'économiser un écran et un clavier et d'utiliser l'ordinateur que l'on a l'habitude d'utiliser.
C'est même à cause de mon Raspberry pi que j'ai commencé à m'intéresser au contrôle à distance d'un ordinateur serveur.
Documentation que j'ai écrite concernant le Raspberry pi.
Le username $USER est : "pi".
Le mot de passe par défaut est : "raspberry".

Pour le pcduino,
Le username $USER est : "linaro".
Le mot de passe par défaut est : "linaro".
Le configurer pour accepter d'être en mode serveur :
"Preferences" > "Desktop Session Settings"
V SSH Key Agent
V Notification Daemon
V Certificate an Key Storage
V Network

Si le clavier n'est pas le bon sur le "pcduino", selon le clavier désiré, dans un Terminal taper :
sudo setxkbmap -layout us   ou
sudo setxkbmap -layout fr   ou
sudo setxkbmap -layout ch   ou
sudo setxkbmap -layout ch de   ou
sudo setxkbmap -layout ch fr
On peut stocker la commande : "setxkbmap -layout ch fr" dans le fichier "/etc/.profile", pour que le bon clavier soit automatique au démarrage.
sudo nano /etc/.profile
On peut remplacer "nano" par n'importe quel éditeur de texte. gedit, leafpad, geany, ... ou utiliser : "midnight commander" (sudo apt-get install mc).

Pour la prise de contrôle par un client, depuis un Terminal client, taper :
ssh linaro@172.16.0.101
Le numéro (172.16.0.101) ou (192.168.xxx.xxx) est celui du pcduino

Pour le mode GUI (Graphical User Interface) :
Depuis un Terminal du pcduino, taper :
x11vnc -passwd mypass -display:0
Le numéro (172.16.0.101) ou (192.168.xxx.xxx) est celui du pcduino
"mypass" est choisi par l'utilisateur et sera utile à la connexion client.

Depuis un Terminal du client, taper :
vncviewer 172.16.0.101:0   ou
vncviewer 172.16.0.101:1   ou
vncviewer 172.16.0.101:2   ou
Le numéro (172.16.0.101) ou (192.168.xxx.xxx) est celui du pcduino
Le mot de passe sera "mypass" défini ci-dessus, lors de l'établissement de la connexion vnc au niveau du serveur (pcduino).

8) SSHFS : SSH File System   Top

En plus de SFTP Secure File Transfer Protocol et de "scp", Secure CoPy, il y a d'autres manières de partager des fichiers à travers le réseaux.
J'ai fait principalement des essais en local, mais avec ce qui précède, il est facile de généraliser à des connexions à travers Internet.

Installation

Sur le serveur et sur le client, dans un Terminal, taper :
sudo apt-get update
sudo apt-get install ssh nmap net-tools     si ce n'est pas déjà fait.
sudo apt-get install sshfs
La première ligne met à jour la liste des dépôts de logiciels.
La deuxième ligne installe le logiciel et le protocole SSHFS.
C'est probablement inutile, le logiciel est installé avec ssh.

Sur le client, dans un Terminal, taper :
sudo mkdir /mnt/deux mkdir $HOME/trois
Ceci crée chez le client un répertoire qui servira à monter un répertoire serveur.
La deuxième instruction n'a pas besoin d'être en mode super utilisateur, elle crée un répertoire client qui servira à monter en mode normal un répertoire serveur.

Cas où la connexion est locale.

Du côté du serveur, il n'y a rien à faire.

Sur le client, dans un Terminal, taper :
sudo sshfs -o allow_other pi@172.16.0.101:/ /mnt/deux
ou
sshfs -o allow_other pi@172.16.0.101:/home/pi /home/bg/trois
"172.16.0.101" est l'adresse IP locale du serveur.
"/home/pi" est le répertoire que le serveur met à disposition du client.
"/mnt/deux" est le répertoire client qui contiendra le répertoire "/" du serveur.
La deuxième instruction n'a pas besoin d'être en mode super utilisateur.
"/home/bg/trois" est le répertoire client qui contiendra le répertoire /home/pi" du serveur.
Il se peut qu'il faille ajouter l'option -p 5904 si on a modifié le fichier "/etc/ssh/sshd_config" du serveur.
Pour chacune des instruction, il faut taper le mot de passe utilisateur du serveur.
Allez dans les répertoires "/mnt/deux" et "/home/bg/trois" et vous verrez le contenu de répertoires du serveur. On peut y faire des transfert de fichiers entre les répertoires client et serveur.

Je n'ai presque pas d'expérience, tout cela est très simple et fonctionne à travers Internet et tout ce qui transféré est crypté.
Il semble que le désavantage est que les transferts sont lents.

Pour démonter un répertoire précédemment monté, sur le client, dans un Terminal, taper :
sudo umount /mnt/deux
ou
sudo umount /home/bg/trois
Pour les deux commandes, il faut taper le mot de passe du client.
En principe le mot de passe est mémorisé quelque temps et il ne faut le taper qu'une fois.

J'ai également modifié le fichier "/etc/fuse.conf", pour qu'il ait les lignes :
# Allow non-root users to specify the allow_other or allow_root mount options.
user_allow_other
Pour cela j'ai utilisé : sudo leafpad /etc/fuse.conf

Si on désire que le montage se fasse automatiquement au démarrage, on peut éditer le fichier client : "/etc/fstab"
sudo leafpad /etc/fstab
Il faut ajouter la ligne :
sshfs -o allow_other pi@172.16.0.101:/home/pi /home/bg/trois
Faut-il ajouter l'option "-p 5904" ?

À travers une connexion Internet public, dans un Terminal client, il suffit de taper :
sudo sshfs -o allow_other -p 5904 pi@85.3.xxx.xxx:/ /mnt/deux
"85.3.xxx.xxx" est l'adresse IP public du serveur.
"5904" est le port utilisé pour la redirection de l'IP public sur l'IP local.

Voici quelques références que j'ai utilisées pour comprendre ce que j'explique ici :
SSHF Ubuntu official documentation
How To Use SSHF to Mount Remote File Systems Over SSH.
DigitalOceanest un bon site de référence, dont le lien précédent vient.

9) NFS Network File System   Top

NFS est une autre possibilité de partager des fichiers à travers le réseau. Il est simple d'utilisation et il semble qu'il est plus rapide que sshfs et sftp.

Installation

Sur le serveur, dans un Terminal, taper :
sudo apt-get update
sudo apt-get install nfs-kernel-server
sudo apt-get install rpcbind   (probablement déjà installé)

Sur le client, dans un Terminal, taper :
sudo apt-get update
sudo apt-get install nfs-common

Sur le serveur, dans un Terminal, taper :
sudo nano /etc/exports
"nano" peut être remplacé par "gedit", "leafpad", "geany", etc.
Il faut ajouter une des lignes suivantes dans ce fichier :
/home/pi 172.16.0.101(rw,no_root_squash)   ou
/home/pi 172.16.0.*(rw,no_root_squash)   ou
/home/pi *(ro,insecure,all_squash)
Il y a encore beaucoup de variantes, il faut comprendre l'idée.
"/home/pi" est le répertoire du serveur que l'on désire mettre à disposition du client.
"172.16.0.101" est l'IP locale du client qui aura accès aux fichiers partagés.
Donc le serveur précise qui a accès aux fichiers qu'il partage.
"172.16.xxx.*" permet d'accepter tous les clients ayant un IP local qui commence par "172.16.xxx". On peut mettre une étoile aussi à la place des "xxx".
"rw" donne accès en lecture (Read) et en écriture (Write).
"ro" ne donne accès qu'en lecture (Read Only).
"no_root_squash" permet de se mettre en mode super utilisateur sur le serveur.
"all_squash" limite les droits du client.
"insecure" indique que la liaison n'est pas sûre. Je ne suis pas au claire là-dessus.
Mettre une * fait que la connexion est beaucoup plus lente au départ.

Après une modification du fichier "/etc/exports", il est bon de taper dans un Terminal du serveur :
sudo /etc/init.d/nfs-kernel-server reload

Cas où la connexion est locale.

Pour lancer le partage, sur le serveur, dans un Terminal, taper :
sudo /etc/init.d/nfs-kernel-server start
sudo service rpcbind start   (cela m'a pris 2 heures pour trouver cela !)
sudo /etc/init.d/nfs-kernel-server restart

Pour contrôler que le dossier décrit dans /etc/exports est bien mis à disposition :
sudo showmount -e   (qui doit retourner : Export list for pi: /home/pi 172.16.0.*)

Pour accéder au partage, sur le client, dans un Terminal, taper :
sudo mount -t nfs 172.16.0.101:/home/pi /home/bg/trois
ou
sudo mount -t nfs4 172.16.0.101:/home/pi /home/bg/trois
ou ( pour que le système essaye de deviner le type )
sudo mount -t auto 172.16.0.101:/home/pi /home/bg/trois
ou
sudo mount 172.16.0.101:/home/pi /home/bg/trois
Cela monte dans le répertoire "/home/bg/trois" du client, le répertoire "/home/pi" mis à disposition par le serveur.
Il faut que le répertoire "/home/bg/trois" existe chez le client.

Pour relancer le partage ou l'arrêter, sur le serveur, dans un Terminal, taper :
sudo /etc/init.d/nfs-kernel-server reload
sudo /etc/init.d/nfs-kernel-server restart
sudo /etc/init.d/nfs-kernel-server stop

Pour démonter le partage, sur le client, dans un Terminal, taper :
sudo umount /home/bg/trois

Suppléments

Une fois, la connexion n'a pas fonctionnée du côté du serveur.
La commande "sudo /etc/init.d/nfs-kernel-server start" sur le serveur me retournait un "... failed!".
L'erreur provenait du fait que j'avais écrit dans le fichier "/etc/exports" "/home/pi 172.16.xxx.*(rw,no_root_sqash)"
Il manque le "u". "sqash" doit être "squash" !
J'ai dû donc corriger en /home/pi 172.16.xxx.*(rw,no_root_squash)

Voici quelques références que j'ai utilisées pour comprendre ce que j'explique ici :
NFS : le partage de fichier sous Unix
How To Set Up an NFS Mount on Ubuntu 14.04
exports(5) - Linux man page

10) Aide à distance à travers Internet   Top

Parfois, on désire aider un ami sur son ordinateur, sans devoir se déplacer pour aller chez lui et sans qu'il ait besoin de venir chez soi.
Dans ce cas le contrôle à distance peut être utile, mais ce qui précède n'aide pas, car c'est le client qui prend contrôle du serveur et il faut modifier des paramètres du routeur du côté serveur.

Toujours en ne modifiant le routeur que du côté serveur, comment faire en sorte d'inverser les rôles et que le serveur puisse voir l'écran du client ?
Il y a plusieurs solutions décrites ci-dessous.

Le plus simple est d'utiliser un logiciel qui fait tout le travail. Mais cela signifie que la connexion passe à travers une société et que vous ne savez pas ce qu'elle fait des données qui y transit. Souvent, cela a peu d'importance, car vos données ne sont pas sensibles, elles n'ont pas de valeurs à vos yeux.
J'ai testé les logiciels suivants, avec succès :
AnyDesk.
J'ai testé, fonctionne très bien, simple à installer et à utiliser.
TeamViewer.
Je l'ai utilisé souvent pour aider des amis, simple et bien.
Il faut généralement installé un logiciel chez la personne aidée et chez celui qui fourni son aide.
Cela marche également entre des système d'exploitations différents, tels que Linux, Windows et Mac.
Gitso.
Je l'ai utilisé plusieurs fois, il fonctionne bien, il a quelques bugs. Je l'ai fait fonctionner entre un ordinateur (aidant) Linux et un ordinateur (aidé) Windows XP.
Mais avec Windows 10, il plante complètement.
Il n'est plus maintenu.
Chaque fois que j'ai eu un problème avec ce logiciel, c'est parce que j'avais mal configuré la redirection de mon routeur.

Autres, pas testé, ou ancien, ou n'a pas fonctionné chez moi :
Skype.
Skype intègre un logiciel permettant de partager son bureau avec l'interlocuteur.
Je n'ai pas testé cette fonctionnalité.
Bureau à distance Google Chrome.
C'est une extension que l'on peut rajouter à Google chrome.
Chez moi, cela n'a pas fonctionné, mais je n'ai pas insisté.
LogMeIn.
Je l'ai utilisé beaucoup autrefois, mais maintenant, il est devenu payant et cher, donc je suis passé à teamviewer, que j'utilise que très occasionnellement.
x2go.
Je ne l'ai pas testé, à l'air bien.
Join.me.
Je ne l'ai pas testé, à l'air bien.

Voici des références qui compilent des listes de logiciels de contrôle à distance :
15 screen-sharing apps for easy (and free) collaboration.
12 Excellent, Free Screen Sharing & Remote Access Tools You Haven't Heard Of Yet.
AlternativeTo Vyew.
Vyew était une possibilité de partager son écran à travers une page Web, sans rien installer du tout. N'existe plus (:-(

Utilisation de x11vnc et vncviewer en mode "reversed"

Je suppose que les installation ont été faites, comme décrit plus haut.
Je continuerai d'appeler "serveur" celui qui a dû modifier les paramètres de son routeur et "client" celui qui prenait contrôle du serveur.
Mais ICI, on va inverser les rôles et c'est le serveur qui va voir l'écran du client et prendre contrôle de son ordinateur.
Cela à pour but :
° Le serveur aide la personne du côté client.
° Le serveur a la tâche compliquée de modifier des paramètres de son serveur.
° Le client se fait aider par la personne du côté serveur, en lui montrant (partageant) l'écran de son ordinateur.

Sur le serveur (celui qui aide), dans un Terminal, taper :
vncviewer -listen 0

Sur le client (celui qui est aidé), dans un Terminal, taper :
x11vnc -connect 172.16.0.101:5500   ou
x11vnc -connect 85.3.xxx.xxx:5500
La première ligne est pour une prise de contrôle en local, pour des tests.
La deuxième ligne est pour une prise de contrôle à travers Internet.
J'ai dû configurer mon modem pour rediriger le port 5500 sur l'IP locale de mon ordinateur, comme je l'ai expliqué dans la partie Configuration du modem-routeur.
Chez moi, ayant deux routeur à la suite, je dois configurer les deux routeurs !

L'avantage de cette méthode est qu'elle passe par une connexion directe, sans faire appel à une société tiers.
Elle est plus difficile à configurer au départ, ensuite, c'est très simple.
Le client, celui qui se fait aider, n'a qu'à installer le logiciel x11vnc :
sudo apt-get update
sudo apt-get install x11vnc

Pour les utilisateurs de Windows, ils peuvent installer : UltraVNC.
J'ai pu le faire fonctionner depuis Windows 10, mais c'était compliqué pour moi.
J'ai dû ouvrir un terminal (chercher cmd avec la loupe en bas à gauche) :
cmd
Ensuite, j'ai utilisé des bonnes vielles commandes DOS :
cd \
dir
cd "Program Files (x86)"
dir
cd "uvnc bvba"
dir
cd UltraVNC dir *.exe
winvnc -connect 85.3.xxx.xxx:5500
Les "dir" ne sont pas indispensables.
"cd Pro" suivit de la touche "Tab" complète la commande. Il faut la modifier pour ajouter le (x86).
Après le "windvnc -connect ...", la connexion s'est établie.
Pour fermer la connexion depuis le "client" (celui qui se fait aider) :
winvnc -kill
Il est possible qu'il faille exécuter "UltraVNC Server" avant d'exécuter "winvnc ...".
c.f. UltraVNC command line parameters.
Probablement qu'il existe une méthode plus simple sous Windows, Mais je n'ai pas trouvé, ni cherché longtemps.

Voici quelques références que j'ai utilisées pour comprendre ce que j'explique ici :
HOWTO: Reverse VNC.

Top



Il existe encore SAMBA pour configurer des réseaux, mais cela m'a semblé très compliqué.
Une référence sur SAMBA


Je serai encore intéressé d'apprendre à configurer un serveur VPN (Vrirtual Private Network), à mieux étudier les avantages et à faire des tests.
c.f. OpenVPN pour l'installation
sudo apt-get install openvpn
sudo apt-get install gadmin-openvpn-server

Pour le client :
sudo apt-get install openvpn
sudo apt-get install gadmin-openvpn-server
sudo apt-get install network-manager-openvpn
Ports utilisés : 1194 en TCP et en UDP.

Voir les liens ci-dessous :
vpnMentor, des informations sur des serveurs VPN
vyprvpn
NordVPN
ExpressVPN


Plan du Site : Home   arrow   ssh_vnc_nfs.html ( = http://www.juggling.ch/gisin/ssh_vnc_nfs/ssh_vnc_nfs.html )


Page mise à jour le 10 avril 2021 par Bernard Gisin     ( Envoyer un e-mail )
Hébergement par : www.infomaniak.ch