Lundi 23 décembre 2019 (Modifié le Jeudi 26 décembre 2019)

Blog statique de type jekyll

CLONER un thème de blog jekyll dans “basicblog”

Les droits sur le dossier

sudo chown   $USER. -R /srv/basicblog

Lancement “bundle” dans le dossier /srv/basicblog

cd /srv/basicblog
bundle install

En cas d’erreur “Following files may not be writable …“

Using concurrent-ruby 1.1.5
Following files may not be writable, so sudo is needed:
  /usr/local/bin
  /var/lib/gems/2.3.0
  /var/lib/gems/2.3.0/build_info
  /var/lib/gems/2.3.0/cache
  /var/lib/gems/2.3.0/doc
  /var/lib/gems/2.3.0/extensions
  /var/lib/gems/2.3.0/gems
  /var/lib/gems/2.3.0/specifications

En cas d’erreur, il faut modifier les droits

sudo chown root.staff -R /var/lib/gems/2.3.0/
sudo chmod 775 -R /var/lib/gems/2.3.0/
sudo usermod -a -G staff $USER

Créer service basicblog
Le script /srv/start_basicblog.sh contenu dans le service

#!/bin/sh
#lancement basicblog
cd /srv/basicblog/
# Attente et construction
/usr/local/bin/bundle exec jekyll build --watch

Droits sur le bash

sudo chown $USER. /srv/start_basicblog.sh
chmod +x /srv/start_basicblog.sh

Pour lancer le serveur basicblog au démarrage, utilisation d’un service systemd
ATTENTION! , remplacer User=utilisateur par votre nom d’utilisateur (echo $USER)

Création d’un service basicblog sous systemd

sudo nano /etc/systemd/system/basicblog.service

Contenu du fichier

[Unit]
Description=basicblog Service
After=network.target

[Service]
Type=simple
User=debadm
ExecStart=/bin/sh /srv/start_basicblog.sh
Restart=on-abort


[Install]
WantedBy=multi-user.target

Lancer le service basicblog :

sudo systemctl daemon-reload
sudo systemctl start basicblog
# Valider le lancement du service basicblog au démarrage
sudo systemctl enable basicblog
#Vérifier
sudo systemctl status basicblog

basicblog génére un dossier statique /srv/basicblog/_site

Pour un accès via le lien https://blog.cinay.xyz, il faut modifier le dossier “root” du site pour qu’il pointe sur **/srv/basicblog/site**
Le dossier “root” actuel est /var/www/webapp_yannick/blog.cinay.xyz
/
On le déplace sudo mv /var/www/webapp_yannick/blog.cinay.xyz_/ . ou efface : sudo rm -r /var/www/webapp_yannick/blog.cinay.xyz_/

Créer le lien avec le dossier /srv/basicblog/_site du site statique

sudo ln -s /srv/basicblog/_site /var/www/webapp_yannick/blog.cinay.xyz_

basicblog-web
Accès site statique https://blog.cinay.xyz

Changer de thème
Les différents thèmes jekyll qui seront testés doivent respecter la procédure suivante

  1. Si un thème présent, il faut le supprimer ou le sauvegarder
    sudo rm -r /srv/basicblog ou sudo mv /srv/basicblog .
    • Les thèmes seront “clonés” en /srv/basicblog
      ex: git clone https://github.com/dbtek/dbyll.git /srv/basicblog
    • Aller au dossier : cd /srv/basicblog
    • Effacer le .lock : rm Gemfile.lock
    • Installer : bundle install
    • Redémarrer le service sudo systemctl restart basicblog

basicblog-web
Tester le nouveau thème https://blog.cinay.xyz

Personalisation thème, style et plugins

favicon

Image dans le répertoire “images”
Définir une constante pour le fichier image favicon_ico: ym01.png dans le fichier _config.yml
Modifier le fichier _includes/default.html

<link rel="icon" type="image/png" href="/images/yannick_small.png">

jekyll-toc

jekyll-toc : Un plugin de filtrage pour Jekyll qui génère une table des matières.

Installation

Ajouter le plugin jekyll-toc dans le Gemfile de votre site.

gem install jekyll-toc

Ajouter la ligne suivante au fichier Gemfile:
gem 'jekyll-toc'

Et ajouter le jekyll-toc au fichier _config.yml de votre site.

plugins:
  - jekyll-toc

Ecrire toc: true dans vos publications (posts).

---
layout: post
title: "Welcome to Jekyll!"
toc: true
---

Ajouter en fin du fichier assets/css/style.css

.section-nav {
  background-color: #FFF;
  margin: 5px 0;
  padding: 10px 30px;
  border-radius: 3px;
}

.toc-entry.toc-h1 { list-style-type: none;}
.toc-entry.toc-h2 { padding-left: 15px; list-style-type: none;}
.toc-entry.toc-h3 { padding-left: 30px; list-style-type: none;}
.toc-entry.toc-h4 { padding-left: 45px; list-style-type: none;}
.toc-entry.toc-h5 { padding-left: 60px; list-style-type: none;}
.toc-entry.toc-h6 { padding-left: 75px; list-style-type: none;}

Actualiser l’installation

bundle update

Usage

Il y a trois filtres liquid disponibles aujourd’hui, qui devraient tous être appliqué à un contenu HTML, par exemple le contenu de la variable liquid disponible dans les modèles de Jekyll.

Utilisation de base (PAR DEFAUT)

filtre toc

Remplacer {{ content }} par {{ content | toc }} dans le fichier _includes/post.html

Ce filtre met la table des matières directement au-dessus du contenu.

Modifier la ligne 42 dans le fichier _includes/post.html


...
          <div class="article_body">
          <!-- {{ content | toc }} -->
          </div>

...

Relancer le service

sudo systemctl restart basicblog

Utilisation avancée

Si vous souhaitez séparer le TOC et son contenu, vous pouvez utiliser les filtres toc_only et inject_anchors .

**filtre **toc_only

Génère le TOC lui-même comme décrit ci-dessous. Surtout utile dans les cas où la table des matières ne doit pas être placée immédiatement au-dessus du contenu, mais à un autre endroit de la page, à savoir un côté.

filtre inject_anchors

Injecte les “ancres” HTML dans le contenu sans réellement créer la table des matières elle-même. Ils sont de la forme:

<a id="heading11" class="anchor" href="#heading1-1" aria-hidden="true">
  <span class="octicon octicon-link"></span>
</a>

Ceci est seulement utile lorsque le TOC lui-même doit être placé à un autre endroit avec le filtre toc_only.

Ajout d’un champ date de modification

Champ date de modification , ajouter la ligne suivante au fichier Gemfile

gem 'jekyll-last-modified-at'

Mise à jour

bundle update

Coder en dur last_modified_at sur chaque billet

---
layout:             post
title:              "An awesome blog post"
date:               2017-12-01 23:22:00 +0000
last_modified_at:   2019-03-25 8:30:00 +0000
---

Je veux seulement spécifier last_modified_at si le post est en cours de mise à jour. Lorsque j’écris un nouveau message, je laisse ce champ vide. Afin de faire ce travail, j’ai ajouté une logique conditionnelle au modèle de publication.

Avec cette disposition en place, j’ai ajouté la logique conditionnelle:

{%- assign date_format = site.minima.date_format | default: '%b %-d, %Y' -%}

{%- if page.last_modified_at -%}
    Last updated: {%- page.last_modified_at | date: date_format -%}
{%- else -%}
    Last updated: {%- page.date | date: date_format -%}
{%- endif -%}

Si la publication a une date last_modified_at elle sera affichée, sinon elle affichera la date de publication d’origine.

Dans mon cas, je veux afficher la date last_modified_at en haut du post et avoir également la date de publication d’origine en bas. De cette façon, les lecteurs savent si le message a été mis à jour récemment et aussi la date de sa publication initiale. Mon fichier de disposition de publication ressemble à ceci:

---
layout: default
---
<article class="post h-entry" itemscope itemtype="http://schema.org/BlogPosting">

  <header class="post-header">
    <h1 class="post-title p-name" itemprop="name headline">{{ page.title | escape }}</h1>
    <p class="post-meta">
      <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
        {%- assign date_format = site.minima.date_format | default: '%b %-d, %Y' -%}

        {%- if page.last_modified_at -%}
            Last updated: {{ page.last_modified_at | date: date_format }}
        {%- else -%}
            Last updated: {{ page.date | date: date_format }}
        {%- endif -%}
      </time>
      {%- if page.author -%}
        • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span class="p-author h-card" itemprop="name">{{ page.author | escape }}</span></span>
      {%- endif -%}
  </header>

  <div class="post-content e-content" itemprop="articleBody">
    {{ content }}
  </div>

  <p class="post-meta">
    <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
        Originally published on: {{ page.date | date: date_format }}
      </time>
  </p>

  {%- if site.disqus.shortname -%}
    {%- include disqus_comments.html -%}
  {%- endif -%}

  <a class="u-url" href="{{ page.url | relative_url }}" hidden></a>
</article>

Ajoutez Syntax Highlighting à votre site Jekyll avec Rouge

La mise en évidence de la syntaxe est importante (en particulier pour la programmation de blogs) car elle améliore la lisibilité des articles. Il permet aux lecteurs de localiser rapidement les extraits de code (qui sont généralement la raison pour laquelle les gens visitent votre page en premier lieu) dont ils ont besoin.

Rouge est un surligneur de syntaxe pur rubis et a été le surligneur par défaut pour Jekyll depuis Jekyll 3 (en remplacement des pygments). Vous pouvez ajouter la syntaxe highlihting en utilisant rouge à votre site Jekyll en quelques étapes seulement.

1 - Installez les gemmes kramdown et rouge
Assurez-vous que les gemmes kramdown et rouge sont installées.

gem install kramdown rouge 

2 - Modifiez vos paramètres _config.yml
Ajoutez les lignes suivantes à votre fichier _config.yml si elles ne s’y trouvent pas déjà.

markdown: kramdown

kramdown:
  input: GFM
  syntax_highlighter: rouge

Si cela ne fonctionne pas, vous pouvez essayer:

markdown: kramdown
highlighter: rouge

Par expérience, mes temps de génération lors de l’utilisation de la première option sont généralement plus rapides.

3 - Créez un fichier css pour le style de surbrillance que vous souhaitez

Rouge est intégré à rougify , un outil en ligne de commande qui convertit un thème de style en fichier css.

Vous pouvez voir les thèmes disponibles en entrant:

rougify help style 

Depuis rouge 1.11.1, les thèmes disponibles sont:
base16, base16.dark, base16.monokai, base16.monokai.light, base16.solarized, base16.solarized.dark, coloré, github, gruvbox, gruvbox.light, molokai, monokai, monokai.sublime, thankful_eyes

Par exemple, si vous souhaitez utiliser le thème monokai, vous devez d’abord créer un fichier css dans votre dossier css à l’aide de rougify:

rougify style monokai > /path/to/css/file.css

Le répertoire habituel pour les fichiers css est assets / css tandis que le nom habituel pour le fichier css est syntax.css donc à partir de votre racine, vous pouvez taper:

rougify style monokai > assets/css/syntax.css

N’oubliez pas ensuite d’inclure la feuille de style dans votre modèle HTML (généralement dans <head> </head>):

<link href= "path-to-syntax-highlighter-stylesheet" rel= "stylesheet" >

Si vous avez enregistré la feuille de style du surligneur de syntaxe en tant que assets/css/syntax.css, vous pouvez ajouter les éléments suivants dans votre modèle HTML nommé _include/default.html:

<link href= "/assets/css/syntax.css" rel= "stylesheet" >
ou
<link href="/assets/css/syntax.css" rel="stylesheet">

4 - Ajoutez une coloration syntaxique à vos articles

Si vous utilisez markdown pour créer vos publications, vous pouvez ajouter une coloration syntaxique en joignant l’extrait de code précédé er suivi de trois backticks ( `` `).
De plus, vous pouvez définir la langue de l’extrait de code après les trois backticks d’ouverture.

Par exemple, si vous souhaitez mettre en évidence du code python

def function():
  print('Yes')

Vous pouvez vérifier les langues prises en charge en entrant:

rougify list 

5 - Que faire si je veux afficher ( `` `) dans mes blocs de code?

Disons que vous voulez afficher ` ` dans votre bloc de code Ce que vous devez faire est de mettre en retrait le ` ` dans votre fichier markdown d’au moins 4 espaces.

The line below is indented by at least 4 spaces.

```python
def function():
  print('Yes')
```
  1. Comment puis-je faire fonctionner des blocs de code ou des extraits de code dans les listes GFM (Github Flavored Markdown)?

Les blocs de code peuvent parfois casser des listes ordonnées (c’est-à-dire que la liste revient toujours à 1). Pour éviter cela, vous pouvez procéder comme suit.

si vous ajoutez un saut de ligne après l’élément de campagne, faites en sorte que le bloc de code soit en retrait d’au moins 4 espaces de l’élément de campagne.

1. Number 1

    ```python
    print("Hello World")
    ```

2. Number 2

    ```ruby
    puts 'Hello World'
    ```

3. Number 3

    ```c
    printf("Hello World");
    ```

ce qui donne:

Numéro 1

 print ( "Hello World" ) 

Numéro 2

 puts 'Hello World' 

Numéro 3

 printf ( "Hello World" ); 

Position des éléments “barre latéral gauche”

Contenu de la barre latérale alligné vers le haut (1% au lieu de 10%)
Directive .sidebar , l’attribut padding-top: 10%; passe à padding-top: 1%; dans le fichier assets/css/style.css

Largeur des colonnes

Modifier la largeur en respectant la proportionnalité , fichier _includes/default.html dans les lignes suivantes


...
	<div class="col-sm-2 sidebar hidden-xs" style="{% if site.sidebar_background_image %}background: url({{site.sidebar_background_image}}) no-repeat center center !important;{% endif %}">
		{% include sidebar.html %}
	</div>

	<div class="col-sm-10 col-sm-offset-2"> 
...

Haut de page (sur écran en bas à droite)

Dans le fichier _includes/default.html insérer les lignes suivantes avant <div class="col-sm-2 sidebar hidden-xs" de la modification précédente


...
   <!-- nav-menu-haut -->
   <div id="nav-haut-page">
   	<a href="#" title="Haut de Page"><i class="fa fa-arrow-circle-up fa-2x"></i></a>
   </div>
...

Modifications autres

Fichier tags.html
Ligne 4 -> title: Etiquettes
Ligne 29 -> Billets étiquettés

Fichier _includes/default.html
Ligne 73 et 87 -> Etiquettes remplace Mots clés

Fichier categories.html
Ligne 3 -> Catégories

Recherche rapide avec fichier json et lunr.js

Actuellement , à chaque recherche, il est généré des données indexées au format json qui représentent le contenu du site.Suivant le volume des données ,la durée de la génération peut être assez longue…

Fichier basicblog.json

Pour rendre la recherche plus rapide , il faut utiliser un fichier json qui sera construit à chaque compilation.
Créez un fichier /basicblog.json à la racine de votre site Jekyll /srv/basicblog/, et remplissez-le avec ce qui suit:

---
layout: null
---
[
{% assign count = 0 %}
 {% assign sortedPosts = site.posts | sort: 'date' %}
  {% for post in sortedPosts %}

    {
      "id": {{count}},
      "title": {{ post.title | jsonify }},
      "url":  {{ post.url | jsonify }},
      "date": {{ {{ {% assign dy = post.date | date: "%a" %}{% case dy %}{% when "Mon" %}Lundi{% when "Tue" %}Mardi{% when "Wed" %}Mercredi{% when "Thu" %}Jeudi{% when "Fri" %}Vendredi{% when "Sat" %}Samedi{% when "Sun" %}Dimanche{% else %}{{ dy }}{% endcase %} {% assign d = post.date | date: "%-d"  %}{% case d %}{% when '1' %}{{ d }}er{% else %}{{ d }}{% endcase %} {% assign m = post.date | date: "%-m" %}{% case m %}{% when '1' %}janvier{% when '2' %}février{% when '3' %}mars{% when '4' %}avril{% when '5' %}mai{% when '6' %}juin{% when '7' %}juillet{% when '8' %}août{% when '9' %}septembre{% when '10' %}octobre{% when '11' %}novembre{% when '12' %}décembre{% endcase %} {{ post.date | date: '%Y' }} | jsonify }},
      "modif": {{ {{ {% assign dy = post.last_modified_at | date: "%a" %}{% case dy %}{% when "Mon" %}Lundi{% when "Tue" %}Mardi{% when "Wed" %}Mercredi{% when "Thu" %}Jeudi{% when "Fri" %}Vendredi{% when "Sat" %}Samedi{% when "Sun" %}Dimanche{% else %}{{ dy }}{% endcase %} {% assign d = post.last_modified_at | date: "%-d"  %}{% case d %}{% when '1' %}{{ d }}er{% else %}{{ d }}{% endcase %} {% assign m = post.last_modified_at | date: "%-m" %}{% case m %}{% when '1' %}janvier{% when '2' %}février{% when '3' %}mars{% when '4' %}avril{% when '5' %}mai{% when '6' %}juin{% when '7' %}juillet{% when '8' %}août{% when '9' %}septembre{% when '10' %}octobre{% when '11' %}novembre{% when '12' %}décembre{% endcase %} {{ post.last_modified_at | date: '%Y' }} | date: "%d/%m/%Y" | jsonify }},
      "tags": "{% for tag in post.tags %}{{ tag }}{% unless forloop.last %}, {% endunless %}{% endfor %}",
      "categories": "{% for category in post.categories %}{{ category }}{% unless forloop.last %}, {% endunless %}{% endfor %}",
      "content"	 : {{post.content | strip_html | truncatewords: 20 | jsonify }}
    }
    {% unless forloop.last %},{% endunless %}
   {% assign count = count | plus: 1 %}
  {% endfor %}
]

Chaque fois que vous exécutez le processus de compilation de Jekyll, Jekyll utilisera /basicblog.json pour déterminer où chercher et ce qu’il faut saisir et il génèrera un fichier _site/basicblog.json.

Analyse json via lunr

Chargement et indexation du fichier pour la recherche , fichier javascript searchplus.js dans le dossier js/

$(document).ready(function () {
var idx ;
var nbart = 0;
var fichier_json = 'basicblog.json';

//http://www.pureexample.com/jquery/get-json.html
function executerRequete(callback) {
   if (nbart === 0) {
        /* set no cache */
        $.ajaxSetup({ cache: false });

			  idx = lunr(function () {
			    this.field('id');
			    this.field('title');
             this.field('content', { boost: 10 });
			    this.field('url');
			    this.field('date');
			    this.field('modif');
			  });

           var html = [];

	  // Get the generated search_data.json file so lunr.js can search it locally.
	  datas = $.getJSON(fichier_json);
	  // Wait for the data to load and add it to lunr
	  datas.then(function(loaded_data){
		    $.each(loaded_data, function(index, d){
		             idx.add({
						    id: index,
						    title: d.title,
						    content: d.content,
						    url: d.url,
						    date: d.date,
						    modif: d.modif
						  });
						  nbart=nbart + 1;
						/*	//stockage item du fichier	
		                html.push("Titre : ", d.title, ", ",
		                          "URL : ", d.url, ", ", 
		                          "Catégorie : ", d.categories, "<br>");
		               // fin */
		    });
 				
  			  /* // affichage des items
            $("#div381").html(html.join('')).css("background-color", "orange");
            */
            // on lance la fonction de callback, le json est chargé et indexé pour la recherche
            callback();

        });
        $.error(function(jqXHR, textStatus, errorThrown){ /* assign handler */
            /* alert(jqXHR.responseText) */
            alert("error occurred!");
        });
    } else {
        // on lance la fonction de callback avec le json déjà récupéré précédemment
        callback();
    }
 }

 $('input#search').focus();
  
	  // Event when the key
	  $('input#search').on('keyup', function () {
	      //event.preventDefault();
	      //var query = $("input#search").val(); // Get the value for the text field
	      var query = $(this).val();
	      var results = idx.search(query); // Get lunr to perform a search
	      display_search_results(results); // Hand the results off to be displayed
	  });

	  /*  fonction affichage des résultats   */
	  function display_search_results(results) {
	    var $search_results = $("#results");
	    // Wait for data to load
	    datas.then(function(loaded_data) {
	
	      // Are there any results?
	      if (results.length) {
	        $search_results.empty(); // Clear any old results
	
	        // Itération sur les résultats
	        results.forEach(function(result) {
	          var item = loaded_data[result.ref];

	          // Création d'une chaîne HTML pour ce résultat
            if (item.modif == null) {
                var datemodif='';  // date de modification identique à la date de création du post , on ajoute rien
            } else {
                var datemodif='<span class="badge" style="background-color: #FF8C00;"><small>Modifié le '+item.modif+'</small></span>'; // ajout date de modification
            }
	          //var appendString = '';
		      var appendString = '<div class="result"><div class="result-body"><a href="'+item.url+'" class="post-title">'+item.title+'</a>&nbsp;<span class="badge" style="background-color: #32CD32;"><small>'+item.date+'&nbsp;</small></span>'+datemodif+'<p>'+item.content+'</p></div>'
	          // Add the snippet to the collection of results.
	          $search_results.append(appendString);
	        });
	      } else {
	        // Si aucun résultat dans la recherche ,on efface les résultats précédents 
	        $search_results.html('');
	      }

	      
	    });
	  }
  function lecture() {
    //$("#nombre").html(nbart);
  }

 // on initialise la lecture au premier élément
 executerRequete(lecture);
   
});

Ajouter le formulaire de recherche

Modifier le fichier _includes/default.html pour y inclure les 2 fichiers javascript lunr.min.js et searchplus.js sous js/

   <script src="/js/lunr.min.js"></script>
   <script src="/js/searchplus.js"></script>

Le formulaire de recherche dans le fichier _includes/page.html

<div class="page-header"> 
  <!-- <span>Blog statique de type jekyll sur site cinay.xyz </span> -->
	<div class="form-group">
		<input placeholder="Rechercher" type="search" id="search" class="form-control input-lg">
	</div>
	<div class="btn-group hidden-xs" id="nav-menu">
		<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
			<i class="fa fa-bars"></i>
		</button>
		<ul class="dropdown-menu" role="menu">
			<li><a href="/"><i class="fa fa-home"></i>Accueil</a></li>
			<li><a href="/categories.html"><i class="fa fa-folder"></i>Catégories</a></li>
			<li><a href="/tags.html"><i class="fa fa-tags"></i>Balises</a></li>
			<li class="divider"></li>
			<li><a href="#"><i class="fa fa-arrow-up"></i>Haut de la Page</a></li>
		</ul>
	</div>
	<div id="results" class="all-posts results"></div>  
  
</div>

<div class="page-header">
  <h1>SSH </h1>
</div>
	
<article>

	<div class="col-sm-10">
        <span class="badge" style="background-color: #32CD32;"><small>Samedi 21 décembre 2019</small></span>
        <span class="badge" style="background-color: #FF8C00;"></span>
	  <div class="article_body">
	  <ul class="section-nav">
<li class="toc-entry toc-h1"><a href="#secure-shell-ssh-">Secure Shell (SSH )</a>
<ul>
<li class="toc-entry toc-h2"><a href="#authentification">Authentification</a>
<ul>
<li class="toc-entry toc-h3"><a href="#authentification-du-serveur">Authentification du SERVEUR</a></li>
<li class="toc-entry toc-h3"><a href="#authentification-du-client">Authentification du CLIENT</a>
<ul>
<li class="toc-entry toc-h4"><a href="#méthode-1--authentification-par-mot-de-passe">Méthode 1 : authentification par mot de passe</a></li>
<li class="toc-entry toc-h4"><a href="#méthode-2--utilisation-dune-clé-publique">Méthode 2 : utilisation d’une clé publique</a></li>
</ul>
</li>
<li class="toc-entry toc-h3"><a href="#les-clés">Les clés</a>
<ul>
<li class="toc-entry toc-h4"><a href="#génération">Génération</a></li>
<li class="toc-entry toc-h4"><a href="#déploiement">Déploiement</a></li>
</ul>
</li>
<li class="toc-entry toc-h3"><a href="#authentification-ciblée">Authentification ciblée</a>
<ul>
<li class="toc-entry toc-h4"><a href="#utilisation-de-ssh-avec-des-clés">Utilisation de SSH avec des clés</a></li>
</ul>
</li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#chiffrement-symétrique">Chiffrement symétrique</a></li>
<li class="toc-entry toc-h2"><a href="#codes-dauthentification-de-message">Codes d’authentification de message</a></li>
<li class="toc-entry toc-h2"><a href="#précautions">Précautions</a></li>
<li class="toc-entry toc-h2"><a href="#erreurs-et-debug">Erreurs et debug</a></li>
<li class="toc-entry toc-h2"><a href="#conclusion">Conclusion</a></li>
<li class="toc-entry toc-h2"><a href="#redirection-locale--l-et-distante--r-port-forwarding--tunneling">Redirection locale ‘-L’ et distante ‘-R’ (Port Forwarding) , tunneling</a>
<ul>
<li class="toc-entry toc-h3"><a href="#comprendre-la-redirection-de-port-port-forwarding">Comprendre la redirection de port (Port Forwarding</a></li>
<li class="toc-entry toc-h3"><a href="#tunneling-ssh">Tunneling SSH</a></li>
<li class="toc-entry toc-h3"><a href="#tunnel-ssh-inversé">Tunnel SSH inversé</a>
<ul>
<li class="toc-entry toc-h4"><a href="#quand-utiliser-le-tunneling-ssh-inverse">Quand utiliser le tunneling SSH inverse</a></li>
<li class="toc-entry toc-h4"><a href="#quest-ce-que-le-tunnel-ssh-inversé">Qu’est-ce que le tunnel SSH inversé?</a></li>
<li class="toc-entry toc-h4"><a href="#comment-ça-marche">Comment ça marche?</a></li>
<li class="toc-entry toc-h4"><a href="#utilisation-du-ssh-reverse-tunneling">Utilisation du SSH Reverse Tunneling</a></li>
<li class="toc-entry toc-h4"><a href="#connexion-à-lordinateur-distant">Connexion à l’ordinateur distant</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toc-entry toc-h1"><a href="#sshfs-pour-monter-des-dossiers-distants-dans-le-système-de-fichier-ssh--fuse">SSHFS pour monter des dossiers distants dans le système de fichier (ssh + fuse)</a>
<ul>
<li class="toc-entry toc-h2"><a href="#présentation-rapide">Présentation rapide</a></li>
<li class="toc-entry toc-h2"><a href="#liens">Liens</a></li>
<li class="toc-entry toc-h2"><a href="#configuration-sshfs-de-base-client-serveur">Configuration SSHFS de base client serveur</a>
<ul>
<li class="toc-entry toc-h3"><a href="#client">client</a></li>
<li class="toc-entry toc-h3"><a href="#serveur">serveur</a></li>
<li class="toc-entry toc-h3"><a href="#test-rapide">Test rapide</a></li>
<li class="toc-entry toc-h3"><a href="#sshfs-avec-clés-et-port-différent">SSHFS avec clés et port différent</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#configurer-le-serveur-ssh">Configurer le serveur SSH</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#créez-un-utilisateur-dédié">Créez un utilisateur dédié</a></li>
<li class="toc-entry toc-h3"><a href="#générez-de-nouvelles-clés-de-sécurité-pour-lutilisateur-précédemment-créé">Générez de nouvelles clés de sécurité pour l’utilisateur précédemment créé</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#configurer-les-clients-gnulinux">Configurer le(s) client(s) GNU/Linux</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis-1">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#si-vous-ne-lavez-jamais-fait-depuis-votre-installation-générez-de-nouvelles-clés">Si vous ne l’avez jamais fait depuis votre installation, générez de nouvelles clés</a></li>
<li class="toc-entry toc-h3"><a href="#exportez-votre-clé-publique-sur-le-serveur">Exportez votre clé publique sur le serveur</a></li>
<li class="toc-entry toc-h3"><a href="#ajoutez-votre-utilisateur-à-la-liste-des-utilisateurs-autorisés-à-utiliser-fuse">Ajoutez votre utilisateur à la liste des utilisateurs autorisés à utiliser fuse</a></li>
<li class="toc-entry toc-h3"><a href="#autoriser-les-autres-utilisateurs-à-monter-un-dossier-avec-fusermount">Autoriser les autres utilisateurs à monter un dossier avec fusermount</a></li>
<li class="toc-entry toc-h3"><a href="#connectez-vous-en-root-admin">Connectez-vous en root (admin)</a></li>
<li class="toc-entry toc-h3"><a href="#générez-une-paire-de-clés-solide-pour-root">Générez une paire de clés solide pour root</a></li>
<li class="toc-entry toc-h3"><a href="#exportez-la-clé-publique-de-root-sur-la-machine-distante">Exportez la clé publique de root sur la machine distante</a></li>
<li class="toc-entry toc-h3"><a href="#testez-si-lajout-a-bien-fonctionné-ne-doit-pas-demander-de-mot-de-passe">Testez si l’ajout a bien fonctionné (ne doit pas demander de mot de passe)</a></li>
<li class="toc-entry toc-h3"><a href="#quittez-root">Quittez root</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#montage-au-démarrage-sur-les-clients-via-fstab-et-hostname-fixe">Montage au démarrage sur le(s) client(s) via fstab et hostname fixe</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis-2">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#créer-le-point-de-montage-local-adaptez-à-vos-envies">Créer le point de montage local (adaptez à vos envies)</a></li>
<li class="toc-entry toc-h3"><a href="#accorder-les-bons-droits-à-notre-point-de-montage">Accorder les bons droits à notre point de montage</a></li>
<li class="toc-entry toc-h3"><a href="#éditez-le-fichier-etcfstab-ctrlx-pour-sauverquitter">Éditez le fichier /etc/fstab (CTRL+X pour sauver&amp;quitter)</a></li>
<li class="toc-entry toc-h3"><a href="#ajoutez-le-montage-afin-de-le-monter-au-boot">Ajoutez le montage afin de le monter au boot</a></li>
<li class="toc-entry toc-h3"><a href="#testez-votre-montage">Testez votre montage</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#montage-au-démarrage-sur-les-clients-via-script-diy-compatible-cross-canal-lan-wan-tor">Montage au démarrage sur le(s) client(s) via script DIY compatible cross-canal (LAN, WAN, TOR)</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis-3">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#créer-le-point-de-montage-local-adaptez-le-à-vos-envies">Créer le point de montage local (adaptez-le à vos envies)</a></li>
<li class="toc-entry toc-h3"><a href="#accorder-les-bons-droits-à-notre-point-de-montage-1">Accorder les bons droits à notre point de montage</a></li>
<li class="toc-entry toc-h3"><a href="#créez-le-script">Créez le script</a></li>
<li class="toc-entry toc-h3"><a href="#collez-le-code-suivant-en-ladaptant">Collez le code suivant en l’adaptant</a></li>
<li class="toc-entry toc-h3"><a href="#rendez-le-script-exécutable">Rendez le script exécutable</a></li>
<li class="toc-entry toc-h3"><a href="#lancez-le-au-boot-en-éditant-etcrclocal">Lancez-le au boot en éditant /etc/rc.local</a></li>
<li class="toc-entry toc-h3"><a href="#rendez-compatible-votre-client-ssh-avec-le-réseau-tor">Rendez compatible votre client SSH avec le réseau tor</a></li>
<li class="toc-entry toc-h3"><a href="#testez-votre-montage-1">Testez votre montage</a></li>
</ul>
</li>
</ul>
</li>
</ul><h1 id="secure-shell-ssh-">
<a class="anchor" href="#secure-shell-ssh-" aria-hidden="true"><span class="octicon octicon-link"></span></a>Secure Shell (SSH )</h1>

<p><img src="/images/ssh_logo1.png" alt=""></p>

<ul>
  <li>Cet article est très largement inspiré de <a href="https://www.guillaume-leduc.fr/securiser-secure-shell-ssh.html">Sécuriser SSH</a> du <a href="https://www.guillaume-leduc.fr/">blog de Guillaume</a>
</li>
  <li>Article original <a href="https://stribika.github.io/2015/01/04/secure-secure-shell.html">Secure Secure Shell</a> ,auteur <strong><em>stribika</em></strong>
</li>
  <li>Exécuter une commande ou un script à distance → <a href="https://www.shellhacks.com/ssh-execute-remote-command-script-linux/">SSH: Execute Remote Command or Script – Linux</a>
</li>
</ul>

<h2 id="authentification">
<a class="anchor" href="#authentification" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification</h2>

<p><em>L’échange de clés permet de s’assurer que le serveur et le client ont partagé un secret sans que personne d’autre ne le sache. Mais il nous faut aussi s’assurer qu’ils ont bien partagé ce secret entre eux UNIQUEMENT.</em></p>

<h3 id="authentification-du-serveur">
<a class="anchor" href="#authentification-du-serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification du SERVEUR</h3>

<p>Le serveur prouve son identité au client en signant la clé résultant de l’échange de clés. Il y a quatre algorithmes pour l’authentification d’une clé publique :</p>

<p>1 <del>DSA avec SHA1</del></p>

<p>2 <del>ECDSA avec SHA256, SHA384 ou SHA512 (selon la taille de la clé)</del></p>

<p>3 <strong>Ed25519</strong> avec SHA512</p>

<p>4 <strong>RSA</strong> avec SHA1</p>

<p>Les clés DSA font 1024 bits, on désactive.Le numéro 2 implique le NIST et devrait être aussi désactivé. Autre inconvénient de DSA et ECDSA, ils utilisent l’aléatoire de la machine pour chaque signature. Si cet aléatoire n’est pas d’une grande qualité, il est possible de retrouver la clé. Heureusement, <strong>RSA avec SHA1 n’est pas un problème</strong> ici puisque la valeur à signer est déjà un hachage SHA2 (voir la section précédente). La fonction de hachage SHA1(SHA2(x)) est aussi sûre que SHA2 seule (le résultat est moins long, certes, mais il n’est pas vulnérable pour autant).</p>

<p>Modifier le fichier serveur  <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
</code></pre></div></div>

<p>A la prochaine connexion, accepter les nouvelles empreintes</p>

<p>La configuration ci-dessus désactive aussi la v1 du protocole SSH, troué de partout et qui de toute manière ne devrait JAMAIS être activée. Nous pouvons aussi supprimer les clés inutilisées et générées par OpenSSH lors de son installation afin de regénérer des clés RSA et Ed25519 plus longues et plus robustes.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> /etc/ssh
<span class="nb">rm </span>ssh_host_<span class="k">*</span>key<span class="k">*</span>
ssh-keygen <span class="nt">-t</span> ed25519 <span class="nt">-f</span> ssh_host_ed25519_key &lt; /dev/null
ssh-keygen <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-f</span> ssh_host_rsa_key &lt; /dev/null
</code></pre></div></div>

<h3 id="authentification-du-client">
<a class="anchor" href="#authentification-du-client" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification du CLIENT</h3>

<p>Le client doit prouver son identité au serveur. Il existe <strong>principalement 2 méthodes</strong></p>

<h4 id="méthode-1--authentification-par-mot-de-passe">
<a class="anchor" href="#m%C3%A9thode-1--authentification-par-mot-de-passe" aria-hidden="true"><span class="octicon octicon-link"></span></a>Méthode 1 : authentification par mot de passe</h4>

<p>Elle peut laisser fuiter les mots de passe en cas de compromission de serveur et est vulnérable aux attaques par bruteforce.</p>

<p><strong>A désactiver dans les meilleurs délais</strong></p>

<p>SERVEUR : <strong>Désactiver la connexion par mot de passe</strong> ,modifier le fichier <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PasswordAuthentication no
ChallengeResponseAuthentication no
</code></pre></div></div>

<p>CLIENT : <strong>Désactiver la connexion par mot de passe</strong> ,modifier le fichier <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    PasswordAuthentication no
    ChallengeResponseAuthentication no
</code></pre></div></div>

<h4 id="méthode-2--utilisation-dune-clé-publique">
<a class="anchor" href="#m%C3%A9thode-2--utilisation-dune-cl%C3%A9-publique" aria-hidden="true"><span class="octicon octicon-link"></span></a>Méthode 2 : utilisation d’une clé publique</h4>

<p>SERVEUR : ,modifier le fichier  <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PubkeyAuthentication yes
</code></pre></div></div>

<p>CLIENT :  ,modifier le fichier  <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    PubkeyAuthentication yes
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
</code></pre></div></div>

<h3 id="les-clés">
<a class="anchor" href="#les-cl%C3%A9s" aria-hidden="true"><span class="octicon octicon-link"></span></a>Les clés</h3>

<p><img src="/images/ssh-keys.png" alt=""></p>

<p>OpenSSH supporte 8 protocoles d’échange de clés :</p>

<p>1 <strong>curve25519-sha256</strong>: ECDH avec Curve25519 et SHA2</p>

<p>2 <del>diffie-hellman-group1-sha1: DH 1024 bits avec SHA1</del></p>

<p>3 <del>diffie-hellman-group14-sha1: DH 2048 bits avec SHA1</del></p>

<p>4 <del>diffie-hellman-group-exchange-sha1: Custom DH avec SHA1</del></p>

<p>5 <strong>diffie-hellman-group-exchange-sha256</strong>: Custom DH avec SHA2</p>

<p>6 <del>ecdh-sha2-nistp256: ECDH avec NIST P-256 et SHA2</del></p>

<p>7 <del>ecdh-sha2-nistp384: ECDH avec NIST P-384 et SHA2</del></p>

<p>8 <del>ecdh-sha2-nistp521: ECDH avec NIST P-521 et SHA2</del></p>

<ul>
  <li>Eliminer les protocoles 6 à 8 parce que le NIST est considéré comme nuisible</li>
  <li>La taille en bits du modulo utilisé par DH : ce qui élimine le protocole 2. 1024 bits ne sont pas suffisants.</li>
  <li>La sûreté de la fonction de hachage : ce qui élimine les protocoles 2 à 4 car SHA1 est cassé.</li>
</ul>

<p>Le  <strong>protocole 1 est le meilleur</strong> mais pour des raisons de compatibilité <strong>on garde le protocole 5</strong>.</p>

<p>Ajouter une ligne au fichier serveur  <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
</code></pre></div></div>
<p>Et deux lignes au fichier client  <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
</code></pre></div></div>

<p>Pour <strong>activer le protocole 5</strong>, ouvrir le fichier <strong>/etc/ssh/moduli</strong> ,s’il existe, et supprimez les lignes où la cinquième colonne est inférieure à 2000 :</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">awk</span> <span class="s1">'$5 &gt; 2000'</span> /etc/ssh/moduli <span class="o">&gt;</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOME</span><span class="k">}</span><span class="s2">/moduli"</span>
<span class="nv">$ </span><span class="nb">wc</span> <span class="nt">-l</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOME</span><span class="k">}</span><span class="s2">/moduli"</span> <span class="c"># Assure-vous que le fichier généré ne soit pas vide</span>
<span class="nv">$ </span><span class="nb">mv</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOME</span><span class="k">}</span><span class="s2">/moduli"</span> /etc/ssh/moduli
</code></pre></div></div>

<p>fichier <strong>/etc/ssh/moduli</strong> inexistant , création</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-G</span> /etc/ssh/moduli.all <span class="nt">-b</span> 4096
ssh-keygen <span class="nt">-T</span> /etc/ssh/moduli.safe <span class="nt">-f</span> /etc/ssh/moduli.all
<span class="nb">mv</span> /etc/ssh/moduli.safe /etc/ssh/moduli
<span class="nb">rm</span> /etc/ssh/moduli.all
</code></pre></div></div>
<p><strong>ATTENTION</strong> Opération très longue en temps</p>

<h4 id="génération">
<a class="anchor" href="#g%C3%A9n%C3%A9ration" aria-hidden="true"><span class="octicon octicon-link"></span></a>Génération</h4>

<p>Utiliser la commande suivante</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-t</span> ed25519 <span class="nt">-o</span> <span class="nt">-a</span> 100
ssh-keygen <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-o</span> <span class="nt">-a</span> 100
</code></pre></div></div>

<h4 id="déploiement">
<a class="anchor" href="#d%C3%A9ploiement" aria-hidden="true"><span class="octicon octicon-link"></span></a>Déploiement</h4>

<p>Le déploiement des clés publiques .pub</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id <span class="nt">-i</span> .ssh/id_ed25519.pub utilisateur@serveur
</code></pre></div></div>

<h3 id="authentification-ciblée">
<a class="anchor" href="#authentification-cibl%C3%A9e" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification ciblée</h3>

<p>Même avec l’authentification par clé publique, vous devriez <strong>autoriser les connections SSH uniquement depuis un nombre restreint d’utilisateurs</strong>. Ceux susceptibles d’accéder aux serveur via SSH. La directive <strong>AllowUsers</strong>  dans  <strong>/etc/ssh/sshd_config</strong>  vous permet de spécifier quels sont les utilisateurs autorisés à se connecter via SSH.</p>

<p>Mais cela peut s’avérer compliqué si vous avez à gérer un nombre important d’utilisateurs. D’autant plus que si vous supprimez l’un d’entre eux, celui-ci ne sera pas retiré de <strong>/etc/ssh/sshd_config</strong>, ce qui alourdit encore plus la maintenance.</p>

<p>Une solution possible est de se tourner vers <strong>AllowGroups</strong> à la place, et d’ajouter un groupe <strong>ssh-users</strong> sur votre machine par exemple, en modifiant **/etc/ssh/sshd_config **:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>AllowGroups ssh-users
</code></pre></div></div>

<p>Pour créer le groupe et lui ajouter un utilisateur :</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>groupadd ssh-users
<span class="nb">sudo </span>usermod <span class="nt">-a</span> <span class="nt">-G</span> ssh-users utilisateur
</code></pre></div></div>

<h4 id="utilisation-de-ssh-avec-des-clés">
<a class="anchor" href="#utilisation-de-ssh-avec-des-cl%C3%A9s" aria-hidden="true"><span class="octicon octicon-link"></span></a>Utilisation de SSH avec des clés</h4>

<p>Pour faciliter la connexion de l’ordinateur distant à l’ordinateur local, nous pouvons configurer des clés SSH.</p>

<p>Sur l’ordinateur distant, tapez cette commande:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen 
</code></pre></div></div>

<p>ssh-keygen dans une fenêtre de terminal</p>

<p>Vous serez invité à entrer un mot de passe. Vous pouvez appuyer sur Entrée pour ignorer les questions de phrase secrète, mais cela n’est pas recommandé. Cela signifierait que n’importe qui sur l’ordinateur distant pourrait établir une connexion SSH avec votre ordinateur local sans demander de mot de passe.</p>

<p>Trois ou quatre mots séparés par des symboles constitueront un mot de passe complexe.</p>

<p><img src="/images/ssh-reverse4.png" alt="Génération de clé ssh dans une fenêtre de terminal"></p>

<p>Vos clés SSH seront générées.</p>

<p>Nous devons transférer la clé publique sur l’ordinateur local. Utilisez cette commande:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id dave@sulaco.local
</code></pre></div></div>

<p>Vous serez invité à entrer le mot de passe du compte d’utilisateur auquel vous vous connectez, dans ce cas, dave@sulaco.local.</p>

<p><img src="/images/ssh-reverse5.png" alt="transfert de clés SSH vers l'ordinateur local dans une fenêtre de terminal"></p>

<p>La première fois que vous effectuez une demande de connexion de l’ordinateur distant à l’ordinateur local, vous devrez fournir le mot de passe complexe. Vous n’aurez plus besoin de le saisir pour vos futures demandes de connexion, tant que la fenêtre du terminal restera ouverte.</p>

<p><img src="/images/ssh-reverse6.png" alt="Boîte de dialogue de demande de phrase secrète"></p>

<p>CONNEXES:  <a href="https://www.howtogeek.com/424510/how-to-create-and-install-ssh-keys-from-the-linux-shell/">How to Create and Install SSH Keys From the Linux Shell</a></p>

<h2 id="chiffrement-symétrique">
<a class="anchor" href="#chiffrement-sym%C3%A9trique" aria-hidden="true"><span class="octicon octicon-link"></span></a>Chiffrement symétrique</h2>

<p>Le chiffrement symétrique est utilisé par SSH pour chiffrer les échanges entre client et serveur une fois l’échange de clé initial et l’authentification terminés. Il existe un nombre d’algorithmes à notre disposition</p>

<p>1  <del>3des-cbc</del></p>

<p>2  <del>aes128-cbc</del></p>

<p>3  <del>aes192-cbc</del></p>

<p>4  <del>aes256-cbc</del></p>

<p>5  <strong>aes-128-ctr</strong></p>

<p>6  <strong>aes-192-ctr</strong></p>

<p>7  <strong>aes-256-ctr</strong></p>

<p>8  aes128-gcm@openssh.com</p>

<p>9  aes256-gcm@openssh.com</p>

<p>10 <del>arcfour</del></p>

<p>11 <del>arcfour128</del></p>

<p>12 <del>arcfour256</del></p>

<p>13 <del>blowfish-cbc</del></p>

<p>14 <del>cast128-cbc</del></p>

<p>15 chacha20-poly1305@openssh.com</p>

<ul>
  <li>Sûreté de l’algorithme : ici <strong>1 et 10 à 12 sont éliminés</strong>. DES et RC4 sont tous les deux cassés, il faut les désactiver dans tous les cas</li>
  <li>Taille de clé : minimum 128 bits</li>
  <li>Taille de bloc : minimum 128 bits. <strong>13 et 14 sont éliminés</strong> car leur taille de bloc ne dépasse pas 64 bits</li>
  <li>Le mode de chiffrement (recommandation)
    <ul>
      <li>
<strong>préférer les modes AE</strong> (Authenticated Encryption)</li>
      <li>
<strong>N’utiliser CTR que pour des raisons de compatibilité.</strong> CTR avec Encrypt-then-MAC doit normalement être sûr (nous y reviendrons un peu plus bas).</li>
    </ul>
  </li>
  <li>
<strong>chacha20-poly1305@openssh</strong> doit être <strong>privilégié</strong> à AES-GCM parce que le protocole SSH ne chiffre pas la taille du message lorsqu’il est utilisé avec GCM (ou EtM). Ceci pouvant être source d’attaque, notamment via l’analyse de trafic.</li>
</ul>

<p>SERVEUR : modifier le fichier <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
</code></pre></div></div>

<p>CLIENT : modifier le fichier <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
</code></pre></div></div>

<h2 id="codes-dauthentification-de-message">
<a class="anchor" href="#codes-dauthentification-de-message" aria-hidden="true"><span class="octicon octicon-link"></span></a>Codes d’authentification de message</h2>

<p>Le chiffrement fournit la confidentialité, un code d’authentification de message (<strong>Message authentication code</strong>, <strong>MAC</strong>) va nous fournir l’intégrité. C’est-à-dire l’assurance que le message qui a été envoyé entre deux pairs n’a pas été modifié en chemin. Et nous avons besoin des deux. **Si nous avons choisi l’AE ci-dessus, inutile d’utiliser un MAC supplémentaire car l’intégrité est déjà garantie. **</p>

<ul>
  <li>
    <p><strong>Pour le cas de CTR</strong>, nous devons en plus choisir un algorithme pour calculer et attacher le MAC à chaque message.</p>

    <ul>
      <li>
<strong>Encrypt-then-MAC</strong> : le message est chiffré, puis le MAC est calculé à partir de celui-ci (une fois chiffré donc)</li>
      <li><del><strong>MAC-then-Encrypt</strong> : le MAC est calculé à partir du message en clair, puis le tout est chiffré</del></li>
      <li><del><strong>Encrypt-and-MAC</strong> : le message est chiffré, puis le MAC calculé à partir du message en clair est attaché</del></li>
    </ul>
  </li>
</ul>

<p><strong>ATTENTION !</strong> Utiliser <strong>Encrypt-then-MAC</strong> et rien d’autre.</p>

<p><em>L’utilisation de <strong>MAC-then-Encrypt</strong> a conduit à suffisamment d’attaques sur TLS alors que <strong>Encrypt-then-MAC</strong> n’en a pas présenté autant sur SSH. La raison à cela est que si jamais vous recevez le message d’un attaquant, plus vous allez le manipuler et plus vous aller lui laisser de chances d’obtenir des informations. Dans le cas de <strong>Encrypt-then-MAC</strong>, le MAC est vérifé et s’il est incorrect, rejeté.  Une étape, aucun moyen d’obtenir des informations. Alors que dans le cas de <strong>MAC-then-Encrypt</strong>, comme le MAC est calculé à partir du message en clair il va falloir déchiffrer le message afin de vérifier le MAC. Un échec de déchiffrement (dû à un mauvais padding CBC par exemple) pourrait prendre moins de temps qu’il n’en faut pour la génération de l’échec de vérification du MAC, et donner du temps à l’attaquant pour accéder à des informations. Le problème est le même avec <strong>Encrypt-and-MAC</strong> .</em></p>

<p>Les choix possibles :</p>

<p>1  <del>hmac-md5</del></p>

<p>2  <del>hmac-md5-96</del></p>

<p>3  hmac-ripemd160</p>

<p>4  <del>hmac-sha1</del></p>

<p>5  <del>hmac-sha1-96</del></p>

<p>6  hmac-sha2-256</p>

<p>7  hmac-sha2-512</p>

<p>8  <del>umac-64</del></p>

<p>9  umac-128@openssh.com</p>

<p>10 <del>hmac-md5-etm@openssh com</del></p>

<p>11 <del>hmac-md5-96-etm@openssh com</del></p>

<p>12 hmac-ripemd160-etm@openssh.com</p>

<p>13 <del>hmac-sha1-etm@openssh com</del></p>

<p>14 <del>hmac-sha1-96-etm@openssh com</del></p>

<p>15 hmac-sha2-256-etm@openssh.com</p>

<p>16 hmac-sha2-512-etm@openssh.com</p>

<p>17 <del>umac-64-etm@openssh com</del></p>

<p>18 umac-128-etm@openssh.com</p>

<ul>
  <li>Sûreté et solidité de l’algorithme : pas de MD5 ni de SHA1</li>
  <li>La taille du tag : au moins 128 bits, ce qui élimine umac-64-etm</li>
  <li>La taille de clé : minimum 128 bits</li>
</ul>

<p>Extrait pour configuration serveur <strong>/etc/ssh/sshd_config</strong> :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
</code></pre></div></div>

<p>Et pour le client <strong>/etc/ssh/ssh_config</strong> :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
</code></pre></div></div>

<h2 id="précautions">
<a class="anchor" href="#pr%C3%A9cautions" aria-hidden="true"><span class="octicon octicon-link"></span></a>Précautions</h2>

<p>La fonctionnalité <strong>UseRoaming</strong>  présente une vulnérabilité , il faut la désactiver (client) dans <strong>/etc/ssh/ssh_config</strong> :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
   UseRoaming no
</code></pre></div></div>

<p>il est important de garder les  clés à l’abri des regards indiscrets.</p>

<h2 id="erreurs-et-debug">
<a class="anchor" href="#erreurs-et-debug" aria-hidden="true"><span class="octicon octicon-link"></span></a>Erreurs et debug</h2>

<ul>
  <li><a href="https://www.skyminds.net/resoudre-lerreur-ssh-missing-privilege-separation-directory-run-sshd/">Résoudre l’erreur SSH: Missing privilege separation directory: /run/sshd</a></li>
  <li><a href="https://www.tecmint.com/enable-debugging-mode-in-ssh/">Enable Debugging Mode in SSH to Troubleshoot Connectivity Issues</a></li>
  <li>
<a href="https://www.ssh.com/manuals/server-admin/61/ch09s01s01.html">Starting SSH Tectia Server in Debug Mode on Unix</a> : <code class="highlighter-rouge">/usr/bin/sshd -ddd</code>
</li>
</ul>

<h2 id="conclusion">
<a class="anchor" href="#conclusion" aria-hidden="true"><span class="octicon octicon-link"></span></a>Conclusion</h2>

<p>C’est certainement une bonne idée de tester tous les changements apportés. <strong>ssh -v</strong> apporte un certain nombre de détails, notamment les algorithmes utilisés, pratique pour déboguer rapidement. Soyez très prudent lorsque vous changez la configuration SSH d’une machine distante. Faites en sorte de toujours garder une session active, sans jamais redémarrer <strong>sshd</strong> avant d’être sûr de soit. Vous pouvez par ailleurs demander à OpenSSH de recharger la configuration sans redémarrer en utilisant un <strong>SIGHUP</strong>. Pour être à l’abri de tout risque, vous pouvez aussi démarrer temporairement un serveur SSH sur un nouveau port le temps de faire vos tests</p>

<ul>
  <li>
<a href="https://github.com/stribika/stribika.github.io/wiki/Secure-Secure-Shell">L’auteur de l’article original (<em>stribika</em>) a créé une page de wiki sur GitHub</a>  que tout le monde peut enrichir en proposant des configurations SSH sûres .</li>
  <li>
<a href="https://tls.imirhil.fr/ssh/">Ensemble d’outils  pour tester la solidité du chiffrement </a> , auteur <a href="https://imirhil.fr/">Aeris</a>
</li>
</ul>

<h2 id="redirection-locale--l-et-distante--r-port-forwarding--tunneling">
<a class="anchor" href="#redirection-locale--l-et-distante--r-port-forwarding--tunneling" aria-hidden="true"><span class="octicon octicon-link"></span></a>Redirection locale ‘-L’ et distante ‘-R’ (Port Forwarding) , tunneling</h2>

<p><em>La différence vient du sens de la connexion. Dans le relayage local, le client tcp et le client ssh sont sur la même machine. Dans le relayage distant ou “remote”, le client ssh est sur la même machine que le serveur tcp.</em></p>

<h3 id="comprendre-la-redirection-de-port-port-forwarding">
<a class="anchor" href="#comprendre-la-redirection-de-port-port-forwarding" aria-hidden="true"><span class="octicon octicon-link"></span></a>Comprendre la redirection de port (Port Forwarding</h3>

<ul>
  <li><a href="/files/html/Comprendre%20la%20redirection%20de%20port%20(Port%20Forwarding).htm">Comprendre la redirection de port (Port Forwarding)</a></li>
</ul>

<h3 id="tunneling-ssh">
<a class="anchor" href="#tunneling-ssh" aria-hidden="true"><span class="octicon octicon-link"></span></a>Tunneling SSH</h3>

<p><em>le Tunneling SSH va consister en l’établissement d’un tunnel construit avec le protocole SSH entre un client et un serveur</em></p>

<ul>
  <li><a href="/files/html/Tunneling%20SSH.htm">Tunneling SSH</a></li>
</ul>

<h3 id="tunnel-ssh-inversé">
<a class="anchor" href="#tunnel-ssh-invers%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Tunnel SSH inversé</h3>

<p><img src="/images/ssh_logo1.png" alt=""><br>
<em>Qu’est-ce que le tunnel SSH inversé  (Reverse SSH Tunneling)? (et comment l’utiliser)<br>
Besoin de SSH sur un ordinateur Linux distant inaccessible?<br>
Demandez-lui de vous appeler, puis creusez cette connexion pour obtenir votre propre session SSH distante.</em></p>

<p>Traduction du post <a href="https://www.howtogeek.com/428413/what-is-reverse-ssh-tunneling-and-how-to-use-it/">“What Is Reverse SSH Tunneling? (and How to Use It)”</a><br>
<a href="https://www.howtogeek.com/author/davidmckay/">Dave McKay</a> July 18, 2019, 9:00am EDT</p>

<h4 id="quand-utiliser-le-tunneling-ssh-inverse">
<a class="anchor" href="#quand-utiliser-le-tunneling-ssh-inverse" aria-hidden="true"><span class="octicon octicon-link"></span></a>Quand utiliser le tunneling SSH inverse</h4>

<p>Parfois, les ordinateurs distants peuvent être difficiles à atteindre. Le site sur lequel ils se trouvent peut avoir des règles de pare-feu strictes, ou peut-être l’administrateur local a-t-il configuré des règles complexes de traduction d’adresses réseau . Comment pouvez-vous atteindre un tel ordinateur si vous devez vous y connecter?</p>

<ul>
  <li>Établissons des étiquettes
    <ul>
      <li>Votre ordinateur est l’ordinateur local car il est proche de vous.</li>
      <li>L’ordinateur auquel vous allez vous connecter est l’ordinateur distant, car il se trouve dans un emplacement différent de celui où vous vous trouvez.</li>
    </ul>
  </li>
</ul>

<p>Pour différencier les ordinateurs locaux des ordinateurs distants utilisés dans cet article, l’ordinateur distant s’appelle «howtogeek» et exécute Ubuntu Linux (avec des fenêtres de terminal violettes). L’ordinateur local s’appelle «Sulaco» et exécute Manjaro Linux (avec des fenêtres de terminal jaunes).</p>

<p>Normalement, vous établissez une connexion SSH à partir de l’ordinateur local et vous connectez à l’ordinateur distant. Ce n’est pas une option dans le scénario de réseau que nous décrivons. Le problème spécifique du réseau importe peu: cela est utile lorsque vous ne pouvez pas utiliser SSH directement sur l’ordinateur distant.</p>

<p>Mais si la configuration réseau de votre côté est simple, l’ordinateur distant peut se connecter à vous. Toutefois, cela ne suffit pas à vos besoins, car cela ne vous fournit pas une session de ligne de commande opérationnelle sur l’ordinateur distant. Mais c’est un début. Vous avez une connexion établie entre les deux ordinateurs.</p>

<blockquote>
  <p>La réponse réside dans le tunnel SSH inversé (Reverse SSH Tunneling).</p>
</blockquote>

<h4 id="quest-ce-que-le-tunnel-ssh-inversé">
<a class="anchor" href="#quest-ce-que-le-tunnel-ssh-invers%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Qu’est-ce que le tunnel SSH inversé?</h4>

<p>Le tunneling SSH inversé vous permet d’utiliser la connexion établie pour établir une nouvelle connexion entre votre ordinateur local et l’ordinateur distant.</p>

<p>Parce que la connexion d’origine vous a été fournie par l’ordinateur distant, l’utiliser pour aller dans le sens opposé l’utilise «en sens inverse». Et parce que SSH est sécurisé, vous établissez une connexion sécurisée au sein d’une connexion sécurisée existante. Cela signifie que votre connexion à l’ordinateur distant agit comme un tunnel privé dans la connexion d’origine.</p>

<p>Et nous arrivons au nom de «tunnel SSH inversé (reverse SSH tunneling)».</p>

<h4 id="comment-ça-marche">
<a class="anchor" href="#comment-%C3%A7a-marche" aria-hidden="true"><span class="octicon octicon-link"></span></a>Comment ça marche?</h4>

<p>Le tunneling SSH inversé repose sur l’ordinateur distant qui utilise la connexion établie pour écouter les nouvelles demandes de connexion émanant de l’ordinateur local.</p>

<p>L’ordinateur distant écoute sur un port réseau de l’ordinateur local. S’il détecte une requête SSH sur ce port, il relaie cette requête à lui-même, via la connexion établie. Ceci fournit une nouvelle connexion de l’ordinateur local à l’ordinateur distant.</p>

<h4 id="utilisation-du-ssh-reverse-tunneling">
<a class="anchor" href="#utilisation-du-ssh-reverse-tunneling" aria-hidden="true"><span class="octicon octicon-link"></span></a>Utilisation du SSH Reverse Tunneling</h4>

<p>SSH sera déjà installé sur votre <u>ordinateur local</u> Linux, mais vous devrez peut-être démarrer le démon SSH (sshd) si l’ordinateur local n’a jamais utilisé les connexions SSH.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl start sshd 
</code></pre></div></div>

<p>Pour que le démon SSH démarre à chaque redémarrage de votre ordinateur, utilisez cette commande:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl enable sshd
</code></pre></div></div>

<p>Sur l’<u>ordinateur distant</u>, nous utilisons la commande suivante.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh -R 43022:localhost:22 dave@sulaco.local
</code></pre></div></div>

<ul>
  <li>L’option <strong>-R (reverse)</strong> indique à ssh que de nouvelles sessions SSH doivent être créées sur l’ordinateur distant.</li>
  <li>
<strong>43022:localhost:22</strong> indique à ssh que les demandes de connexion au port 43022 de l’ordinateur local doivent être transmises au port 22 de l’ordinateur distant. Le port 43022 a été choisi car il est répertorié comme étant non alloué . Ce n’est pas un numéro spécial.</li>
  <li>
<strong>dave@sulaco.local</strong> est le compte d’utilisateur auquel l’ordinateur distant va se connecter sur l’ordinateur local.</li>
</ul>

<blockquote>
  <p><em>Vous pouvez être averti de ne jamais vous être connecté à l’ordinateur local auparavant. Vous pouvez également voir un avertissement lorsque les détails de la connexion sont ajoutés à la liste des hôtes SSH reconnus. Ce que vous voyez, le cas échéant, dépend du fait que des connexions aient déjà été établies entre l’ordinateur distant et l’ordinateur local.</em></p>
</blockquote>

<p>Vous serez invité à entrer le mot de passe du compte que vous utilisez pour vous connecter à l’ordinateur local.</p>

<p><img src="/images/ssh-reverse1.png" alt="Détails de la connexion SSH dans une fenêtre de terminal"></p>

<blockquote>
  <p>Notez que lorsque la connexion est établie, l’invite de commande passe de dave@howtogeek à dave@sulaco</p>
</blockquote>

<p>Nous sommes maintenant connectés à l’ordinateur local à partir de l’ordinateur distant. Cela signifie que nous pouvons lui donner des commandes. Utilisons la commande who pour voir les connexions sur l’ordinateur local.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>who
</code></pre></div></div>

<p><img src="/images/ssh-reverse2.png" alt="la commande who dans une fenêtre de terminal"></p>

<p>Nous pouvons voir que la personne avec le compte d’utilisateur appelé Dave a ouvert une session sur l’ordinateur local et que l’ordinateur distant s’est connecté (avec les mêmes informations d’identification d’utilisateur) à partir de l’adresse IP 192.168.4.25.</p>

<p>CONNEXES: <a href="https://www.howtogeek.com/410423/how-to-determine-the-current-user-account-in-linux/">How to Determine the Current User Account in Linux</a></p>

<h4 id="connexion-à-lordinateur-distant">
<a class="anchor" href="#connexion-%C3%A0-lordinateur-distant" aria-hidden="true"><span class="octicon octicon-link"></span></a>Connexion à l’ordinateur distant</h4>

<p>Comme la connexion à partir de l’ordinateur distant est réussie et qu’il écoute les connexions, vous pouvez essayer de vous connecter à l’ordinateur distant à partir de l’ordinateur local.</p>

<p>L’ordinateur distant écoute sur le port 43022 de l’ordinateur local. Donc, quelque peu contre-intuitif, pour établir une connexion avec l’ordinateur distant, nous demandons à ssh d’établir une connexion avec l’ordinateur local, sur le port 43022. Cette demande de connexion sera transmise à l’ordinateur distant.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh localhost -p 43022 
</code></pre></div></div>

<p>Nous sommes invités à entrer le mot de passe du compte utilisateur, puis à l’ordinateur local à partir de l’ordinateur distant.</p>

<p><img src="/images/ssh-reverse3.png" alt="connexion inverse du tunnel SSH à l'ordinateur distant"></p>

<p>Notez que l’invite de commande est passée de dave@sulaco à dave@howtogeek. Nous avons atteint notre objectif d’établir une connexion SSH avec un ordinateur distant difficile à atteindre.</p>

<h1 id="sshfs-pour-monter-des-dossiers-distants-dans-le-système-de-fichier-ssh--fuse">
<a class="anchor" href="#sshfs-pour-monter-des-dossiers-distants-dans-le-syst%C3%A8me-de-fichier-ssh--fuse" aria-hidden="true"><span class="octicon octicon-link"></span></a>SSHFS pour monter des dossiers distants dans le système de fichier (ssh + fuse)</h1>

<p><em>Sshfs est un outil permettant d’utiliser le protocole ssh comme un système de fichiers</em></p>

<h2 id="présentation-rapide">
<a class="anchor" href="#pr%C3%A9sentation-rapide" aria-hidden="true"><span class="octicon octicon-link"></span></a>Présentation rapide</h2>
<p><a href="https://fr.wikipedia.org/wiki/Secure_shell_file_system">SSHFS</a> permet d’utiliser un <a href="https://doc.ubuntu-fr.org/ssh">serveur ssh</a> afin de monter des dossiers distants disponibles dans le système de fichier grâce à <a href="https://fr.wikipedia.org/wiki/Filesystem_in_Userspace">fuse</a>.
Il ne nécessite côté serveur que openssh-server et côté client fuse openssh-client sshfs et éventuellement tor.
N’hésitez pas à signaler toute erreur/faute.</p>

<p>Ce tuto est une mise en forme de ces deux-ci :</p>

<ul>
  <li><a href="https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&amp;t=339&amp;p=847#p847">[Tuto/HowTo] Configurer et monter SSHFS sécurisé via utilisateur dédié côté serveur</a></li>
  <li><a href="https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&amp;t=339&amp;p=847#p893">[Tuto/HowTo] [GNU/Linux] Montage SSHFS cross-canal (Lan, Wan, Tor, etc)</a></li>
</ul>

<h2 id="liens">
<a class="anchor" href="#liens" aria-hidden="true"><span class="octicon octicon-link"></span></a>Liens</h2>
<ul>
  <li><a href="http://linux.die.net/man/8/adduser">Man Page adduser [EN]</a></li>
  <li><a href="https://192.168.1.65/forum4/viewtopic.php?f=40&amp;t=295">[Tuto/HowTo] [GNU/Linux] SSH</a></li>
  <li><a href="https://192.168.1.65/forum4/viewtopic.php?f=68&amp;t=288#p740">[Tuto/HowTo] Monter dossier distant sur Raspberry Pi &amp; Ubuntu/Debian</a></li>
  <li><a href="https://192.168.1.65/forum4/viewtopic.php?f=45&amp;t=159">[Tuto/HowTo] Garder un contrôle discret sur son serveur avec tor et ssh</a></li>
  <li><a href="http://www.linuxtricks.fr/wiki/autour-du-protocole-ssh-utiliser-le-canal-de-communication#paragraph_sshfs-systeme-de-fichiers-sur-ssh">LinuxTricks - Autour du protocole SSH, utiliser le canal de communication</a></li>
  <li><a href="https://linuxfr.org/users/elessar/journaux/sshfs-est-un-vrai-systeme-de-fichiers-en-reseau">LinuxFR Journal - SSHFS est un vrai système de fichiers en réseau</a></li>
</ul>

<h2 id="configuration-sshfs-de-base-client-serveur">
<a class="anchor" href="#configuration-sshfs-de-base-client-serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>Configuration SSHFS de base client serveur</h2>

<p><em>Note : Les paquets “openssh-client” et “fuse-utils” sont requis, mais il sont déjà installés par défaut</em></p>

<h3 id="client">
<a class="anchor" href="#client" aria-hidden="true"><span class="octicon octicon-link"></span></a>client</h3>

<p>Il faut disposer d’un serveur ssh focntionnel</p>

<h3 id="serveur">
<a class="anchor" href="#serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>serveur</h3>

<p>Installer sshfs</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt update &amp;&amp; sudo apt install sshfs # debian
sudo pacman -S sshfs  # archlinux/manjaro
</code></pre></div></div>

<h3 id="test-rapide">
<a class="anchor" href="#test-rapide" aria-hidden="true"><span class="octicon octicon-link"></span></a>Test rapide</h3>

<p>Sur le système client, créer un répertoire dans lequel va être monté le système de fichiers :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir /home/utilisateur/Test
</code></pre></div></div>

<p>Monter un répertoire distant (ici ~/Public):</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sshfs utilisateur@ip_distante:/home/utilisateur/Public /home/utilisateur/Test
</code></pre></div></div>

<p>Le mot de passe de l’utilisateur est alors demandé.</p>

<p>Ouvrir l gestionnaire de fichiers pour accèder à vos fichiers distants.</p>

<p>Enfin, penser à démonter :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fusermount -u /home/utilisateur/Test
</code></pre></div></div>

<h3 id="sshfs-avec-clés-et-port-différent">
<a class="anchor" href="#sshfs-avec-cl%C3%A9s-et-port-diff%C3%A9rent" aria-hidden="true"><span class="octicon octicon-link"></span></a>SSHFS avec clés et port différent</h3>

<p><code class="highlighter-rouge">sshfs -oIdentityFile=&lt;clé privée&gt; utilisateur@domaine.tld:&lt;dossier distant&gt; &lt;dossier local&gt; -C -p &lt;port si différent de 22&gt;</code></p>

<h2 id="configurer-le-serveur-ssh">
<a class="anchor" href="#configurer-le-serveur-ssh" aria-hidden="true"><span class="octicon octicon-link"></span></a>Configurer le serveur SSH</h2>

<h3 id="installez-les-pré-requis">
<a class="anchor" href="#installez-les-pr%C3%A9-requis" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install tor openssh-server
</code></pre></div></div>

<h3 id="créez-un-utilisateur-dédié">
<a class="anchor" href="#cr%C3%A9ez-un-utilisateur-d%C3%A9di%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créez un utilisateur dédié</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo adduser userCommunSFTP
</code></pre></div></div>

<h3 id="générez-de-nouvelles-clés-de-sécurité-pour-lutilisateur-précédemment-créé">
<a class="anchor" href="#g%C3%A9n%C3%A9rez-de-nouvelles-cl%C3%A9s-de-s%C3%A9curit%C3%A9-pour-lutilisateur-pr%C3%A9c%C3%A9demment-cr%C3%A9%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Générez de nouvelles clés de sécurité pour l’utilisateur précédemment créé</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>su userCommunSFTP
ssh-keygen -t ed25519 -o -a 1666
ssh-keygen -t rsa -b 4096 -o -a 1666
</code></pre></div></div>

<h2 id="configurer-les-clients-gnulinux">
<a class="anchor" href="#configurer-les-clients-gnulinux" aria-hidden="true"><span class="octicon octicon-link"></span></a>Configurer le(s) client(s) GNU/Linux</h2>

<h3 id="installez-les-pré-requis-1">
<a class="anchor" href="#installez-les-pr%C3%A9-requis-1" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install openssh-client sshfs fuse
</code></pre></div></div>

<h3 id="si-vous-ne-lavez-jamais-fait-depuis-votre-installation-générez-de-nouvelles-clés">
<a class="anchor" href="#si-vous-ne-lavez-jamais-fait-depuis-votre-installation-g%C3%A9n%C3%A9rez-de-nouvelles-cl%C3%A9s" aria-hidden="true"><span class="octicon octicon-link"></span></a>Si vous ne l’avez jamais fait depuis votre installation, générez de nouvelles clés</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen -t ed25519 -o -a 16669
ssh-keygen -t rsa -b 4096 -o -a 16669
</code></pre></div></div>

<p><strong>-o -a 100</strong> : permet de faire boucler l’algorithme 100 fois
<strong>-b 4096</strong> : précise qu’on veut une clé à 4096 bits (au début des années 2k la France interdisait plus de 126 bit ;) )
<strong>-t rsa</strong> : on utilise l’<a href="https://fr.wikipedia.org/wiki/Chiffrement_RSA">algorithme RSA</a>
<strong>-t ed25519</strong> : on utilise l’<a href="https://fr.wikipedia.org/wiki/EdDSA">algorithme EdDSA</a></p>

<h3 id="exportez-votre-clé-publique-sur-le-serveur">
<a class="anchor" href="#exportez-votre-cl%C3%A9-publique-sur-le-serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>Exportez votre clé publique sur le serveur</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id -i ~/.ssh/id_ed25519.pub userCommunSFTP@adresseServerSSH
</code></pre></div></div>

<h3 id="ajoutez-votre-utilisateur-à-la-liste-des-utilisateurs-autorisés-à-utiliser-fuse">
<a class="anchor" href="#ajoutez-votre-utilisateur-%C3%A0-la-liste-des-utilisateurs-autoris%C3%A9s-%C3%A0-utiliser-fuse" aria-hidden="true"><span class="octicon octicon-link"></span></a>Ajoutez votre utilisateur à la liste des utilisateurs autorisés à utiliser fuse</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo adduser $USER fuse
</code></pre></div></div>

<ul>
  <li>
<strong>Note :</strong> remplacez $USER par l’utilisateur de votre choix (par défaut $USER = votre utilisateur courant (celui qui a ouvert la session sur votre machine)). Sur Raspberry Pi cette commande peut échouer sans que cela ne pose problème.</li>
</ul>

<h3 id="autoriser-les-autres-utilisateurs-à-monter-un-dossier-avec-fusermount">
<a class="anchor" href="#autoriser-les-autres-utilisateurs-%C3%A0-monter-un-dossier-avec-fusermount" aria-hidden="true"><span class="octicon octicon-link"></span></a>Autoriser les autres utilisateurs à monter un dossier avec fusermount</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/fuse.conf
</code></pre></div></div>

<ul>
  <li>Décommentez (enlevez le # devant) <strong>user_allow_other</strong> puis tapez <strong>CTRL+X</strong> pour sauver et quitter.</li>
</ul>

<p><strong>Pour effectuer le montage SSHFS au démarrage il est fort possible que la machine passe par root.</strong></p>

<h3 id="connectez-vous-en-root-admin">
<a class="anchor" href="#connectez-vous-en-root-admin" aria-hidden="true"><span class="octicon octicon-link"></span></a>Connectez-vous en root (admin)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo su
</code></pre></div></div>

<h3 id="générez-une-paire-de-clés-solide-pour-root">
<a class="anchor" href="#g%C3%A9n%C3%A9rez-une-paire-de-cl%C3%A9s-solide-pour-root" aria-hidden="true"><span class="octicon octicon-link"></span></a>Générez une paire de clés solide pour root</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen -t rsa -b 4096 -o -a 16666
ssh-keygen -t ed25519 -o -a 16666
</code></pre></div></div>

<ul>
  <li>La deuxième (ed25519) ne fonctionne pas sur Raspberry Pi</li>
</ul>

<h3 id="exportez-la-clé-publique-de-root-sur-la-machine-distante">
<a class="anchor" href="#exportez-la-cl%C3%A9-publique-de-root-sur-la-machine-distante" aria-hidden="true"><span class="octicon octicon-link"></span></a>Exportez la clé publique de root sur la machine distante</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id -i /root/.ssh/id_rsa.pub userCommunSFTP@adresseServerSSH

</code></pre></div></div>

<h3 id="testez-si-lajout-a-bien-fonctionné-ne-doit-pas-demander-de-mot-de-passe">
<a class="anchor" href="#testez-si-lajout-a-bien-fonctionn%C3%A9-ne-doit-pas-demander-de-mot-de-passe" aria-hidden="true"><span class="octicon octicon-link"></span></a>Testez si l’ajout a bien fonctionné (ne doit pas demander de mot de passe)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh userCommunSFTP@adresseServerSSH
</code></pre></div></div>

<h3 id="quittez-root">
<a class="anchor" href="#quittez-root" aria-hidden="true"><span class="octicon octicon-link"></span></a>Quittez root</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exit
</code></pre></div></div>

<h2 id="montage-au-démarrage-sur-les-clients-via-fstab-et-hostname-fixe">
<a class="anchor" href="#montage-au-d%C3%A9marrage-sur-les-clients-via-fstab-et-hostname-fixe" aria-hidden="true"><span class="octicon octicon-link"></span></a>Montage au démarrage sur le(s) client(s) via fstab et hostname fixe</h2>
<h3 id="installez-les-pré-requis-2">
<a class="anchor" href="#installez-les-pr%C3%A9-requis-2" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install openssh-client
</code></pre></div></div>

<h3 id="créer-le-point-de-montage-local-adaptez-à-vos-envies">
<a class="anchor" href="#cr%C3%A9er-le-point-de-montage-local-adaptez-%C3%A0-vos-envies" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créer le point de montage local (adaptez à vos envies)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo mkdir /media/monPointDeMontageLocal
</code></pre></div></div>

<h3 id="accorder-les-bons-droits-à-notre-point-de-montage">
<a class="anchor" href="#accorder-les-bons-droits-%C3%A0-notre-point-de-montage" aria-hidden="true"><span class="octicon octicon-link"></span></a>Accorder les bons droits à notre point de montage</h3>
<ul>
  <li>Spécifiez les propriétaires</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chown root:$USER -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>
    <p><strong>Note :</strong> $USER = votre utilisateur courant par défaut, changez si besoin</p>
  </li>
  <li>
    <p>Spécifiez aussi les droits d’accès des propriétaires</p>
  </li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chmod 770 -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>Note : si vous souhaitez que le montage soit accessible à tous vos utilisateurs systèmes remplacez 770 par 774 pour lecture uniquement ou 777 s’ils (tous les utilisateurs) peuvent avoir les mêmes droits que votre utilisateur principal sur ce point de montage. ( voir <a href="https://fr.wikipedia.org/wiki/Chmod#Modes">chmod</a> )</li>
</ul>

<h3 id="éditez-le-fichier-etcfstab-ctrlx-pour-sauverquitter">
<a class="anchor" href="#%C3%A9ditez-le-fichier-etcfstab-ctrlx-pour-sauverquitter" aria-hidden="true"><span class="octicon octicon-link"></span></a>Éditez le fichier <em>/etc/fstab</em> (CTRL+X pour sauver&amp;quitter)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/fstab
</code></pre></div></div>

<h3 id="ajoutez-le-montage-afin-de-le-monter-au-boot">
<a class="anchor" href="#ajoutez-le-montage-afin-de-le-monter-au-boot" aria-hidden="true"><span class="octicon octicon-link"></span></a>Ajoutez le montage afin de le monter au boot</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>userCommunSFTP@adresseServerSSH:/home/userCommunSFTP/                /media/monPointDeMontageLocal          fuse.sshfs           port=22,user,noatime,reconnect,_netdev,nofail,allow_other     0 0
</code></pre></div></div>
<ul>
  <li>
<strong>Note :</strong> <em>:/dossier/distant/</em> n’est pas obligatoire ; <em>nofail</em> permet d’empêcher le boot de crasher si le montage ne réussit pas, <em>_netdev</em> ordonne d’attendre que le réseau soit fonctionnel avant d’effectuer le montage; <em>allow_other</em> autorise les autres utilisateurs à monter le dossier. Ajoutez <em>noauto</em> si vous voulez que le montage ne s’effectue qu’à la demande et non au démarrage de la machine.</li>
</ul>

<h3 id="testez-votre-montage">
<a class="anchor" href="#testez-votre-montage" aria-hidden="true"><span class="octicon octicon-link"></span></a>Testez votre montage</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo mount /media/monPointDeMontageLocal
</code></pre></div></div>

<h2 id="montage-au-démarrage-sur-les-clients-via-script-diy-compatible-cross-canal-lan-wan-tor">
<a class="anchor" href="#montage-au-d%C3%A9marrage-sur-les-clients-via-script-diy-compatible-cross-canal-lan-wan-tor" aria-hidden="true"><span class="octicon octicon-link"></span></a>Montage au démarrage sur le(s) client(s) via script DIY compatible cross-canal (LAN, WAN, TOR)</h2>
<h3 id="installez-les-pré-requis-3">
<a class="anchor" href="#installez-les-pr%C3%A9-requis-3" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install openssh-client tor
</code></pre></div></div>

<h3 id="créer-le-point-de-montage-local-adaptez-le-à-vos-envies">
<a class="anchor" href="#cr%C3%A9er-le-point-de-montage-local-adaptez-le-%C3%A0-vos-envies" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créer le point de montage local (adaptez-le à vos envies)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo mkdir /media/monPointDeMontageLocal
</code></pre></div></div>

<h3 id="accorder-les-bons-droits-à-notre-point-de-montage-1">
<a class="anchor" href="#accorder-les-bons-droits-%C3%A0-notre-point-de-montage-1" aria-hidden="true"><span class="octicon octicon-link"></span></a>Accorder les bons droits à notre point de montage</h3>
<ul>
  <li>Spécifiez les propriétaires</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chown root:$USER -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>
    <p><strong>Note :</strong> $USER = votre utilisateur courant par défaut, changez si besoin</p>
  </li>
  <li>
    <p>Spécifiez aussi les droits d’accès des propriétaires</p>
  </li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chmod 770 -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>
<strong>Note :</strong> si vous souhaitez que le montage soit accessible à tous vos utilisateurs système remplacez 770 par 774 pour lecture uniquement ou 777 s’ils (tous les utilisateurs) peuvent avoir les mêmes droits que votre utilisateur principal sur ce point de montage. ( voir chmod )</li>
</ul>

<h3 id="créez-le-script">
<a class="anchor" href="#cr%C3%A9ez-le-script" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créez le script</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

<h3 id="collez-le-code-suivant-en-ladaptant">
<a class="anchor" href="#collez-le-code-suivant-en-ladaptant" aria-hidden="true"><span class="octicon octicon-link"></span></a>Collez le code suivant en l’adaptant</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
<span class="c">#licence WTFPL - script infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&amp;t=339&amp;p=893#p893</span>
<span class="c">#github : https://github.com/voxdemonix/divers-script/blob/master/mountSSHFS_crosscanal.sh</span>
<span class="c">#work on raspbian, ubuntu, debian and possibly Arch</span>


<span class="k">if</span> <span class="o">[</span> <span class="o">!</span> <span class="s2">"</span><span class="nv">$SUDO_USER</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nb">echo</span> <span class="s2">"i need root =&gt; </span><span class="nv">$0</span><span class="s2">"</span>
<span class="nb">exit </span>0
<span class="k">fi
</span><span class="nb">sleep </span>60 <span class="c"># petit délai d'attente afin que le réseau soit prêt</span>


<span class="nv">IpServerLocale</span><span class="o">=</span><span class="s2">"192.168.1.42"</span> <span class="c"># server IP LAN</span>
<span class="nv">AdresseServerOnion</span><span class="o">=</span><span class="s2">"blablablablabla1.onion"</span> <span class="c"># tor hidden service OR Hostname WAN</span>
<span class="nv">MacServerLocale</span><span class="o">=</span><span class="s2">"00:00:00:00:00:00"</span> <span class="c">#l'adresse mac du serveur SSH (tapez ifconfig dans un terminal sur votre server pour la voir)</span>
<span class="nv">UserRemoteForSsh</span><span class="o">=</span><span class="s2">"user_sur_server"</span> <span class="c"># l'utilisateur à utiliser côté serveur ( /!\ n'utilisez jamais root !)</span>
<span class="nv">port</span><span class="o">=</span><span class="s2">"22"</span> <span class="c"># le port sur le server</span>
<span class="nv">monPointDeMontageLocal</span><span class="o">=</span><span class="s2">"/media/monPointDeMontageLocal"</span>
<span class="nv">monPointDeMontageDistant</span><span class="o">=</span><span class="s2">"/home/user_sur_serveur/"</span>

umount <span class="nv">$monPointDeMontageLocal</span> <span class="nt">-f</span> <span class="o">&gt;&gt;</span> /dev/null 2&gt;&amp;1
ping <span class="nv">$IpServerLocale</span> <span class="nt">-c</span> 1 <span class="o">&gt;&gt;</span> /dev/null 2&gt;&amp;1
<span class="nv">macRecover</span><span class="o">=</span><span class="si">$(</span>arp <span class="nt">-n</span> | <span class="nb">grep</span> <span class="nt">-i</span> <span class="nt">-o</span> <span class="nv">$MacServerLocale</span><span class="si">)</span>

<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$macRecover</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"</span><span class="nv">$MacServerLocale</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
   </span>sshfs <span class="nt">-o</span> allow_other <span class="nt">-o</span> reconnect <span class="nt">-o</span> <span class="nv">ServerAliveInterval</span><span class="o">=</span>15 <span class="nv">$UserRemoteForSsh</span>@<span class="nv">$IpServerLocale</span>:<span class="nv">$monPointDeMontageDistant</span> <span class="nv">$monPointDeMontageLocal</span> <span class="nt">-p</span> <span class="nv">$port</span> <span class="nt">-C</span>
<span class="k">else
   </span>sshfs <span class="nt">-o</span> allow_other <span class="nt">-o</span> reconnect <span class="nt">-o</span> <span class="nv">ServerAliveInterval</span><span class="o">=</span>15 <span class="nv">$UserRemoteForSsh</span>@<span class="nv">$AdresseServerOnion</span>:<span class="nv">$monPointDeMontageDistant</span> <span class="nv">$monPointDeMontageLocal</span> <span class="nt">-p</span> <span class="nv">$port</span> <span class="nt">-C</span>
<span class="k">fi</span>
</code></pre></div></div>

<ul>
  <li>
<strong>IpServerLocale=”192.168.1.42”</strong> =&gt; l’adresse IP LAN de votre serveur</li>
  <li>
<strong>AdresseServerOnion=”blablablablabla1.onion”</strong> =&gt; l’hostname de votre serveur. Au choix un Tor Hidden Service, une IP WAn ou un Hostname WAN (exemple.com)</li>
  <li>
<strong>MacServerLocale=”00:00:00:00:00:00”</strong> =&gt; l’adresse MAC de votre server (tapez ifconfig sur votre serveur pour la voir)</li>
  <li>
<strong>UserRemoteForSsh=”user_sur_server”</strong> =&gt; utilisateur sur le serveur SSH à utiliser pour la connexion</li>
  <li>
<strong>port=”22”</strong> =&gt; le port d’écoute du serveur ssh (par défaut 22)</li>
  <li>
<strong>monPointDeMontageLocal=”/media/monPointDeMontageLocal”</strong> =&gt; où rendre disponible le montage sur votre client</li>
  <li>
<strong>monPointDeMontageDistant=”/home/user_sur_server/”</strong> =&gt; Le dossier sur le serveur à partir du quel effectuer le montage</li>
</ul>

<h3 id="rendez-le-script-exécutable">
<a class="anchor" href="#rendez-le-script-ex%C3%A9cutable" aria-hidden="true"><span class="octicon octicon-link"></span></a>Rendez le script exécutable</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chmod +x /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

<h3 id="lancez-le-au-boot-en-éditant-etcrclocal">
<a class="anchor" href="#lancez-le-au-boot-en-%C3%A9ditant-etcrclocal" aria-hidden="true"><span class="octicon octicon-link"></span></a>Lancez-le au boot en éditant /etc/rc.local</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/rc.local
</code></pre></div></div>

<ul>
  <li>Et ajoutez la ligne suivante <strong>avant “exit 0”</strong> ###</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

<h3 id="rendez-compatible-votre-client-ssh-avec-le-réseau-tor">
<a class="anchor" href="#rendez-compatible-votre-client-ssh-avec-le-r%C3%A9seau-tor" aria-hidden="true"><span class="octicon octicon-link"></span></a>Rendez compatible votre client SSH avec le réseau tor</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/ssh/ssh_config
</code></pre></div></div>

<ul>
  <li>Et collez les lignes suivantes puis tapez <strong>CTRL+X</strong> pour sauver&amp;quitter</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    Host *.onion
       ProxyCommand nc -xlocalhost:9050 -X5 %h %p
</code></pre></div></div>

<h3 id="testez-votre-montage-1">
<a class="anchor" href="#testez-votre-montage-1" aria-hidden="true"><span class="octicon octicon-link"></span></a>Testez votre montage</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

	  </div>

		
		<ul class="tag_box list-unstyled list-inline">
		  <li><i class="fa fa-folder-open"></i></li>
		  
		  
			 
				<li><a href="/categories.html#linux-ref">
					linux <span>(93)</span>
					
				</a></li>
			
		  
		</ul>
		  

		
		<ul class="list-inline">
		  <li><i class="fa fa-tags"></i></li>
		  
		  
			 
				<li>
					<a href="/tags.html#cli-ref">
					cli <span>(13)</span>
					,
					</a>
				</li>
			 
				<li>
					<a href="/tags.html#ssh-ref">
					ssh <span>(3)</span>
					
					</a>
				</li>
			
		  
		  
		</ul>
		  


    <div class="clearfix"></div>

	</div>
	
</article>
<div class="clearfix"></div>



search.html situé sous la racine /srv/basicblog/ du site statique dans le dossier _layouts

---
layout: default
---
<div class="search">
	<div class="page-header">
  <h1>SSH </h1>
</div>
	
<article>

	<div class="col-sm-10">
        <span class="badge" style="background-color: #32CD32;"><small>Samedi 21 décembre 2019</small></span>
        <span class="badge" style="background-color: #FF8C00;"></span>
	  <div class="article_body">
	  <ul class="section-nav">
<li class="toc-entry toc-h1"><a href="#secure-shell-ssh-">Secure Shell (SSH )</a>
<ul>
<li class="toc-entry toc-h2"><a href="#authentification">Authentification</a>
<ul>
<li class="toc-entry toc-h3"><a href="#authentification-du-serveur">Authentification du SERVEUR</a></li>
<li class="toc-entry toc-h3"><a href="#authentification-du-client">Authentification du CLIENT</a>
<ul>
<li class="toc-entry toc-h4"><a href="#méthode-1--authentification-par-mot-de-passe">Méthode 1 : authentification par mot de passe</a></li>
<li class="toc-entry toc-h4"><a href="#méthode-2--utilisation-dune-clé-publique">Méthode 2 : utilisation d’une clé publique</a></li>
</ul>
</li>
<li class="toc-entry toc-h3"><a href="#les-clés">Les clés</a>
<ul>
<li class="toc-entry toc-h4"><a href="#génération">Génération</a></li>
<li class="toc-entry toc-h4"><a href="#déploiement">Déploiement</a></li>
</ul>
</li>
<li class="toc-entry toc-h3"><a href="#authentification-ciblée">Authentification ciblée</a>
<ul>
<li class="toc-entry toc-h4"><a href="#utilisation-de-ssh-avec-des-clés">Utilisation de SSH avec des clés</a></li>
</ul>
</li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#chiffrement-symétrique">Chiffrement symétrique</a></li>
<li class="toc-entry toc-h2"><a href="#codes-dauthentification-de-message">Codes d’authentification de message</a></li>
<li class="toc-entry toc-h2"><a href="#précautions">Précautions</a></li>
<li class="toc-entry toc-h2"><a href="#erreurs-et-debug">Erreurs et debug</a></li>
<li class="toc-entry toc-h2"><a href="#conclusion">Conclusion</a></li>
<li class="toc-entry toc-h2"><a href="#redirection-locale--l-et-distante--r-port-forwarding--tunneling">Redirection locale ‘-L’ et distante ‘-R’ (Port Forwarding) , tunneling</a>
<ul>
<li class="toc-entry toc-h3"><a href="#comprendre-la-redirection-de-port-port-forwarding">Comprendre la redirection de port (Port Forwarding</a></li>
<li class="toc-entry toc-h3"><a href="#tunneling-ssh">Tunneling SSH</a></li>
<li class="toc-entry toc-h3"><a href="#tunnel-ssh-inversé">Tunnel SSH inversé</a>
<ul>
<li class="toc-entry toc-h4"><a href="#quand-utiliser-le-tunneling-ssh-inverse">Quand utiliser le tunneling SSH inverse</a></li>
<li class="toc-entry toc-h4"><a href="#quest-ce-que-le-tunnel-ssh-inversé">Qu’est-ce que le tunnel SSH inversé?</a></li>
<li class="toc-entry toc-h4"><a href="#comment-ça-marche">Comment ça marche?</a></li>
<li class="toc-entry toc-h4"><a href="#utilisation-du-ssh-reverse-tunneling">Utilisation du SSH Reverse Tunneling</a></li>
<li class="toc-entry toc-h4"><a href="#connexion-à-lordinateur-distant">Connexion à l’ordinateur distant</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toc-entry toc-h1"><a href="#sshfs-pour-monter-des-dossiers-distants-dans-le-système-de-fichier-ssh--fuse">SSHFS pour monter des dossiers distants dans le système de fichier (ssh + fuse)</a>
<ul>
<li class="toc-entry toc-h2"><a href="#présentation-rapide">Présentation rapide</a></li>
<li class="toc-entry toc-h2"><a href="#liens">Liens</a></li>
<li class="toc-entry toc-h2"><a href="#configuration-sshfs-de-base-client-serveur">Configuration SSHFS de base client serveur</a>
<ul>
<li class="toc-entry toc-h3"><a href="#client">client</a></li>
<li class="toc-entry toc-h3"><a href="#serveur">serveur</a></li>
<li class="toc-entry toc-h3"><a href="#test-rapide">Test rapide</a></li>
<li class="toc-entry toc-h3"><a href="#sshfs-avec-clés-et-port-différent">SSHFS avec clés et port différent</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#configurer-le-serveur-ssh">Configurer le serveur SSH</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#créez-un-utilisateur-dédié">Créez un utilisateur dédié</a></li>
<li class="toc-entry toc-h3"><a href="#générez-de-nouvelles-clés-de-sécurité-pour-lutilisateur-précédemment-créé">Générez de nouvelles clés de sécurité pour l’utilisateur précédemment créé</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#configurer-les-clients-gnulinux">Configurer le(s) client(s) GNU/Linux</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis-1">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#si-vous-ne-lavez-jamais-fait-depuis-votre-installation-générez-de-nouvelles-clés">Si vous ne l’avez jamais fait depuis votre installation, générez de nouvelles clés</a></li>
<li class="toc-entry toc-h3"><a href="#exportez-votre-clé-publique-sur-le-serveur">Exportez votre clé publique sur le serveur</a></li>
<li class="toc-entry toc-h3"><a href="#ajoutez-votre-utilisateur-à-la-liste-des-utilisateurs-autorisés-à-utiliser-fuse">Ajoutez votre utilisateur à la liste des utilisateurs autorisés à utiliser fuse</a></li>
<li class="toc-entry toc-h3"><a href="#autoriser-les-autres-utilisateurs-à-monter-un-dossier-avec-fusermount">Autoriser les autres utilisateurs à monter un dossier avec fusermount</a></li>
<li class="toc-entry toc-h3"><a href="#connectez-vous-en-root-admin">Connectez-vous en root (admin)</a></li>
<li class="toc-entry toc-h3"><a href="#générez-une-paire-de-clés-solide-pour-root">Générez une paire de clés solide pour root</a></li>
<li class="toc-entry toc-h3"><a href="#exportez-la-clé-publique-de-root-sur-la-machine-distante">Exportez la clé publique de root sur la machine distante</a></li>
<li class="toc-entry toc-h3"><a href="#testez-si-lajout-a-bien-fonctionné-ne-doit-pas-demander-de-mot-de-passe">Testez si l’ajout a bien fonctionné (ne doit pas demander de mot de passe)</a></li>
<li class="toc-entry toc-h3"><a href="#quittez-root">Quittez root</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#montage-au-démarrage-sur-les-clients-via-fstab-et-hostname-fixe">Montage au démarrage sur le(s) client(s) via fstab et hostname fixe</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis-2">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#créer-le-point-de-montage-local-adaptez-à-vos-envies">Créer le point de montage local (adaptez à vos envies)</a></li>
<li class="toc-entry toc-h3"><a href="#accorder-les-bons-droits-à-notre-point-de-montage">Accorder les bons droits à notre point de montage</a></li>
<li class="toc-entry toc-h3"><a href="#éditez-le-fichier-etcfstab-ctrlx-pour-sauverquitter">Éditez le fichier /etc/fstab (CTRL+X pour sauver&amp;quitter)</a></li>
<li class="toc-entry toc-h3"><a href="#ajoutez-le-montage-afin-de-le-monter-au-boot">Ajoutez le montage afin de le monter au boot</a></li>
<li class="toc-entry toc-h3"><a href="#testez-votre-montage">Testez votre montage</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#montage-au-démarrage-sur-les-clients-via-script-diy-compatible-cross-canal-lan-wan-tor">Montage au démarrage sur le(s) client(s) via script DIY compatible cross-canal (LAN, WAN, TOR)</a>
<ul>
<li class="toc-entry toc-h3"><a href="#installez-les-pré-requis-3">Installez les pré-requis</a></li>
<li class="toc-entry toc-h3"><a href="#créer-le-point-de-montage-local-adaptez-le-à-vos-envies">Créer le point de montage local (adaptez-le à vos envies)</a></li>
<li class="toc-entry toc-h3"><a href="#accorder-les-bons-droits-à-notre-point-de-montage-1">Accorder les bons droits à notre point de montage</a></li>
<li class="toc-entry toc-h3"><a href="#créez-le-script">Créez le script</a></li>
<li class="toc-entry toc-h3"><a href="#collez-le-code-suivant-en-ladaptant">Collez le code suivant en l’adaptant</a></li>
<li class="toc-entry toc-h3"><a href="#rendez-le-script-exécutable">Rendez le script exécutable</a></li>
<li class="toc-entry toc-h3"><a href="#lancez-le-au-boot-en-éditant-etcrclocal">Lancez-le au boot en éditant /etc/rc.local</a></li>
<li class="toc-entry toc-h3"><a href="#rendez-compatible-votre-client-ssh-avec-le-réseau-tor">Rendez compatible votre client SSH avec le réseau tor</a></li>
<li class="toc-entry toc-h3"><a href="#testez-votre-montage-1">Testez votre montage</a></li>
</ul>
</li>
</ul>
</li>
</ul><h1 id="secure-shell-ssh-">
<a class="anchor" href="#secure-shell-ssh-" aria-hidden="true"><span class="octicon octicon-link"></span></a>Secure Shell (SSH )</h1>

<p><img src="/images/ssh_logo1.png" alt=""></p>

<ul>
  <li>Cet article est très largement inspiré de <a href="https://www.guillaume-leduc.fr/securiser-secure-shell-ssh.html">Sécuriser SSH</a> du <a href="https://www.guillaume-leduc.fr/">blog de Guillaume</a>
</li>
  <li>Article original <a href="https://stribika.github.io/2015/01/04/secure-secure-shell.html">Secure Secure Shell</a> ,auteur <strong><em>stribika</em></strong>
</li>
  <li>Exécuter une commande ou un script à distance → <a href="https://www.shellhacks.com/ssh-execute-remote-command-script-linux/">SSH: Execute Remote Command or Script – Linux</a>
</li>
</ul>

<h2 id="authentification">
<a class="anchor" href="#authentification" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification</h2>

<p><em>L’échange de clés permet de s’assurer que le serveur et le client ont partagé un secret sans que personne d’autre ne le sache. Mais il nous faut aussi s’assurer qu’ils ont bien partagé ce secret entre eux UNIQUEMENT.</em></p>

<h3 id="authentification-du-serveur">
<a class="anchor" href="#authentification-du-serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification du SERVEUR</h3>

<p>Le serveur prouve son identité au client en signant la clé résultant de l’échange de clés. Il y a quatre algorithmes pour l’authentification d’une clé publique :</p>

<p>1 <del>DSA avec SHA1</del></p>

<p>2 <del>ECDSA avec SHA256, SHA384 ou SHA512 (selon la taille de la clé)</del></p>

<p>3 <strong>Ed25519</strong> avec SHA512</p>

<p>4 <strong>RSA</strong> avec SHA1</p>

<p>Les clés DSA font 1024 bits, on désactive.Le numéro 2 implique le NIST et devrait être aussi désactivé. Autre inconvénient de DSA et ECDSA, ils utilisent l’aléatoire de la machine pour chaque signature. Si cet aléatoire n’est pas d’une grande qualité, il est possible de retrouver la clé. Heureusement, <strong>RSA avec SHA1 n’est pas un problème</strong> ici puisque la valeur à signer est déjà un hachage SHA2 (voir la section précédente). La fonction de hachage SHA1(SHA2(x)) est aussi sûre que SHA2 seule (le résultat est moins long, certes, mais il n’est pas vulnérable pour autant).</p>

<p>Modifier le fichier serveur  <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
</code></pre></div></div>

<p>A la prochaine connexion, accepter les nouvelles empreintes</p>

<p>La configuration ci-dessus désactive aussi la v1 du protocole SSH, troué de partout et qui de toute manière ne devrait JAMAIS être activée. Nous pouvons aussi supprimer les clés inutilisées et générées par OpenSSH lors de son installation afin de regénérer des clés RSA et Ed25519 plus longues et plus robustes.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> /etc/ssh
<span class="nb">rm </span>ssh_host_<span class="k">*</span>key<span class="k">*</span>
ssh-keygen <span class="nt">-t</span> ed25519 <span class="nt">-f</span> ssh_host_ed25519_key &lt; /dev/null
ssh-keygen <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-f</span> ssh_host_rsa_key &lt; /dev/null
</code></pre></div></div>

<h3 id="authentification-du-client">
<a class="anchor" href="#authentification-du-client" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification du CLIENT</h3>

<p>Le client doit prouver son identité au serveur. Il existe <strong>principalement 2 méthodes</strong></p>

<h4 id="méthode-1--authentification-par-mot-de-passe">
<a class="anchor" href="#m%C3%A9thode-1--authentification-par-mot-de-passe" aria-hidden="true"><span class="octicon octicon-link"></span></a>Méthode 1 : authentification par mot de passe</h4>

<p>Elle peut laisser fuiter les mots de passe en cas de compromission de serveur et est vulnérable aux attaques par bruteforce.</p>

<p><strong>A désactiver dans les meilleurs délais</strong></p>

<p>SERVEUR : <strong>Désactiver la connexion par mot de passe</strong> ,modifier le fichier <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PasswordAuthentication no
ChallengeResponseAuthentication no
</code></pre></div></div>

<p>CLIENT : <strong>Désactiver la connexion par mot de passe</strong> ,modifier le fichier <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    PasswordAuthentication no
    ChallengeResponseAuthentication no
</code></pre></div></div>

<h4 id="méthode-2--utilisation-dune-clé-publique">
<a class="anchor" href="#m%C3%A9thode-2--utilisation-dune-cl%C3%A9-publique" aria-hidden="true"><span class="octicon octicon-link"></span></a>Méthode 2 : utilisation d’une clé publique</h4>

<p>SERVEUR : ,modifier le fichier  <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PubkeyAuthentication yes
</code></pre></div></div>

<p>CLIENT :  ,modifier le fichier  <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    PubkeyAuthentication yes
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
</code></pre></div></div>

<h3 id="les-clés">
<a class="anchor" href="#les-cl%C3%A9s" aria-hidden="true"><span class="octicon octicon-link"></span></a>Les clés</h3>

<p><img src="/images/ssh-keys.png" alt=""></p>

<p>OpenSSH supporte 8 protocoles d’échange de clés :</p>

<p>1 <strong>curve25519-sha256</strong>: ECDH avec Curve25519 et SHA2</p>

<p>2 <del>diffie-hellman-group1-sha1: DH 1024 bits avec SHA1</del></p>

<p>3 <del>diffie-hellman-group14-sha1: DH 2048 bits avec SHA1</del></p>

<p>4 <del>diffie-hellman-group-exchange-sha1: Custom DH avec SHA1</del></p>

<p>5 <strong>diffie-hellman-group-exchange-sha256</strong>: Custom DH avec SHA2</p>

<p>6 <del>ecdh-sha2-nistp256: ECDH avec NIST P-256 et SHA2</del></p>

<p>7 <del>ecdh-sha2-nistp384: ECDH avec NIST P-384 et SHA2</del></p>

<p>8 <del>ecdh-sha2-nistp521: ECDH avec NIST P-521 et SHA2</del></p>

<ul>
  <li>Eliminer les protocoles 6 à 8 parce que le NIST est considéré comme nuisible</li>
  <li>La taille en bits du modulo utilisé par DH : ce qui élimine le protocole 2. 1024 bits ne sont pas suffisants.</li>
  <li>La sûreté de la fonction de hachage : ce qui élimine les protocoles 2 à 4 car SHA1 est cassé.</li>
</ul>

<p>Le  <strong>protocole 1 est le meilleur</strong> mais pour des raisons de compatibilité <strong>on garde le protocole 5</strong>.</p>

<p>Ajouter une ligne au fichier serveur  <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
</code></pre></div></div>
<p>Et deux lignes au fichier client  <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
</code></pre></div></div>

<p>Pour <strong>activer le protocole 5</strong>, ouvrir le fichier <strong>/etc/ssh/moduli</strong> ,s’il existe, et supprimez les lignes où la cinquième colonne est inférieure à 2000 :</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">awk</span> <span class="s1">'$5 &gt; 2000'</span> /etc/ssh/moduli <span class="o">&gt;</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOME</span><span class="k">}</span><span class="s2">/moduli"</span>
<span class="nv">$ </span><span class="nb">wc</span> <span class="nt">-l</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOME</span><span class="k">}</span><span class="s2">/moduli"</span> <span class="c"># Assure-vous que le fichier généré ne soit pas vide</span>
<span class="nv">$ </span><span class="nb">mv</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOME</span><span class="k">}</span><span class="s2">/moduli"</span> /etc/ssh/moduli
</code></pre></div></div>

<p>fichier <strong>/etc/ssh/moduli</strong> inexistant , création</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-G</span> /etc/ssh/moduli.all <span class="nt">-b</span> 4096
ssh-keygen <span class="nt">-T</span> /etc/ssh/moduli.safe <span class="nt">-f</span> /etc/ssh/moduli.all
<span class="nb">mv</span> /etc/ssh/moduli.safe /etc/ssh/moduli
<span class="nb">rm</span> /etc/ssh/moduli.all
</code></pre></div></div>
<p><strong>ATTENTION</strong> Opération très longue en temps</p>

<h4 id="génération">
<a class="anchor" href="#g%C3%A9n%C3%A9ration" aria-hidden="true"><span class="octicon octicon-link"></span></a>Génération</h4>

<p>Utiliser la commande suivante</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-t</span> ed25519 <span class="nt">-o</span> <span class="nt">-a</span> 100
ssh-keygen <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-o</span> <span class="nt">-a</span> 100
</code></pre></div></div>

<h4 id="déploiement">
<a class="anchor" href="#d%C3%A9ploiement" aria-hidden="true"><span class="octicon octicon-link"></span></a>Déploiement</h4>

<p>Le déploiement des clés publiques .pub</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id <span class="nt">-i</span> .ssh/id_ed25519.pub utilisateur@serveur
</code></pre></div></div>

<h3 id="authentification-ciblée">
<a class="anchor" href="#authentification-cibl%C3%A9e" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authentification ciblée</h3>

<p>Même avec l’authentification par clé publique, vous devriez <strong>autoriser les connections SSH uniquement depuis un nombre restreint d’utilisateurs</strong>. Ceux susceptibles d’accéder aux serveur via SSH. La directive <strong>AllowUsers</strong>  dans  <strong>/etc/ssh/sshd_config</strong>  vous permet de spécifier quels sont les utilisateurs autorisés à se connecter via SSH.</p>

<p>Mais cela peut s’avérer compliqué si vous avez à gérer un nombre important d’utilisateurs. D’autant plus que si vous supprimez l’un d’entre eux, celui-ci ne sera pas retiré de <strong>/etc/ssh/sshd_config</strong>, ce qui alourdit encore plus la maintenance.</p>

<p>Une solution possible est de se tourner vers <strong>AllowGroups</strong> à la place, et d’ajouter un groupe <strong>ssh-users</strong> sur votre machine par exemple, en modifiant **/etc/ssh/sshd_config **:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>AllowGroups ssh-users
</code></pre></div></div>

<p>Pour créer le groupe et lui ajouter un utilisateur :</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>groupadd ssh-users
<span class="nb">sudo </span>usermod <span class="nt">-a</span> <span class="nt">-G</span> ssh-users utilisateur
</code></pre></div></div>

<h4 id="utilisation-de-ssh-avec-des-clés">
<a class="anchor" href="#utilisation-de-ssh-avec-des-cl%C3%A9s" aria-hidden="true"><span class="octicon octicon-link"></span></a>Utilisation de SSH avec des clés</h4>

<p>Pour faciliter la connexion de l’ordinateur distant à l’ordinateur local, nous pouvons configurer des clés SSH.</p>

<p>Sur l’ordinateur distant, tapez cette commande:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen 
</code></pre></div></div>

<p>ssh-keygen dans une fenêtre de terminal</p>

<p>Vous serez invité à entrer un mot de passe. Vous pouvez appuyer sur Entrée pour ignorer les questions de phrase secrète, mais cela n’est pas recommandé. Cela signifierait que n’importe qui sur l’ordinateur distant pourrait établir une connexion SSH avec votre ordinateur local sans demander de mot de passe.</p>

<p>Trois ou quatre mots séparés par des symboles constitueront un mot de passe complexe.</p>

<p><img src="/images/ssh-reverse4.png" alt="Génération de clé ssh dans une fenêtre de terminal"></p>

<p>Vos clés SSH seront générées.</p>

<p>Nous devons transférer la clé publique sur l’ordinateur local. Utilisez cette commande:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id dave@sulaco.local
</code></pre></div></div>

<p>Vous serez invité à entrer le mot de passe du compte d’utilisateur auquel vous vous connectez, dans ce cas, dave@sulaco.local.</p>

<p><img src="/images/ssh-reverse5.png" alt="transfert de clés SSH vers l'ordinateur local dans une fenêtre de terminal"></p>

<p>La première fois que vous effectuez une demande de connexion de l’ordinateur distant à l’ordinateur local, vous devrez fournir le mot de passe complexe. Vous n’aurez plus besoin de le saisir pour vos futures demandes de connexion, tant que la fenêtre du terminal restera ouverte.</p>

<p><img src="/images/ssh-reverse6.png" alt="Boîte de dialogue de demande de phrase secrète"></p>

<p>CONNEXES:  <a href="https://www.howtogeek.com/424510/how-to-create-and-install-ssh-keys-from-the-linux-shell/">How to Create and Install SSH Keys From the Linux Shell</a></p>

<h2 id="chiffrement-symétrique">
<a class="anchor" href="#chiffrement-sym%C3%A9trique" aria-hidden="true"><span class="octicon octicon-link"></span></a>Chiffrement symétrique</h2>

<p>Le chiffrement symétrique est utilisé par SSH pour chiffrer les échanges entre client et serveur une fois l’échange de clé initial et l’authentification terminés. Il existe un nombre d’algorithmes à notre disposition</p>

<p>1  <del>3des-cbc</del></p>

<p>2  <del>aes128-cbc</del></p>

<p>3  <del>aes192-cbc</del></p>

<p>4  <del>aes256-cbc</del></p>

<p>5  <strong>aes-128-ctr</strong></p>

<p>6  <strong>aes-192-ctr</strong></p>

<p>7  <strong>aes-256-ctr</strong></p>

<p>8  aes128-gcm@openssh.com</p>

<p>9  aes256-gcm@openssh.com</p>

<p>10 <del>arcfour</del></p>

<p>11 <del>arcfour128</del></p>

<p>12 <del>arcfour256</del></p>

<p>13 <del>blowfish-cbc</del></p>

<p>14 <del>cast128-cbc</del></p>

<p>15 chacha20-poly1305@openssh.com</p>

<ul>
  <li>Sûreté de l’algorithme : ici <strong>1 et 10 à 12 sont éliminés</strong>. DES et RC4 sont tous les deux cassés, il faut les désactiver dans tous les cas</li>
  <li>Taille de clé : minimum 128 bits</li>
  <li>Taille de bloc : minimum 128 bits. <strong>13 et 14 sont éliminés</strong> car leur taille de bloc ne dépasse pas 64 bits</li>
  <li>Le mode de chiffrement (recommandation)
    <ul>
      <li>
<strong>préférer les modes AE</strong> (Authenticated Encryption)</li>
      <li>
<strong>N’utiliser CTR que pour des raisons de compatibilité.</strong> CTR avec Encrypt-then-MAC doit normalement être sûr (nous y reviendrons un peu plus bas).</li>
    </ul>
  </li>
  <li>
<strong>chacha20-poly1305@openssh</strong> doit être <strong>privilégié</strong> à AES-GCM parce que le protocole SSH ne chiffre pas la taille du message lorsqu’il est utilisé avec GCM (ou EtM). Ceci pouvant être source d’attaque, notamment via l’analyse de trafic.</li>
</ul>

<p>SERVEUR : modifier le fichier <strong>/etc/ssh/sshd_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
</code></pre></div></div>

<p>CLIENT : modifier le fichier <strong>/etc/ssh/ssh_config</strong></p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
</code></pre></div></div>

<h2 id="codes-dauthentification-de-message">
<a class="anchor" href="#codes-dauthentification-de-message" aria-hidden="true"><span class="octicon octicon-link"></span></a>Codes d’authentification de message</h2>

<p>Le chiffrement fournit la confidentialité, un code d’authentification de message (<strong>Message authentication code</strong>, <strong>MAC</strong>) va nous fournir l’intégrité. C’est-à-dire l’assurance que le message qui a été envoyé entre deux pairs n’a pas été modifié en chemin. Et nous avons besoin des deux. **Si nous avons choisi l’AE ci-dessus, inutile d’utiliser un MAC supplémentaire car l’intégrité est déjà garantie. **</p>

<ul>
  <li>
    <p><strong>Pour le cas de CTR</strong>, nous devons en plus choisir un algorithme pour calculer et attacher le MAC à chaque message.</p>

    <ul>
      <li>
<strong>Encrypt-then-MAC</strong> : le message est chiffré, puis le MAC est calculé à partir de celui-ci (une fois chiffré donc)</li>
      <li><del><strong>MAC-then-Encrypt</strong> : le MAC est calculé à partir du message en clair, puis le tout est chiffré</del></li>
      <li><del><strong>Encrypt-and-MAC</strong> : le message est chiffré, puis le MAC calculé à partir du message en clair est attaché</del></li>
    </ul>
  </li>
</ul>

<p><strong>ATTENTION !</strong> Utiliser <strong>Encrypt-then-MAC</strong> et rien d’autre.</p>

<p><em>L’utilisation de <strong>MAC-then-Encrypt</strong> a conduit à suffisamment d’attaques sur TLS alors que <strong>Encrypt-then-MAC</strong> n’en a pas présenté autant sur SSH. La raison à cela est que si jamais vous recevez le message d’un attaquant, plus vous allez le manipuler et plus vous aller lui laisser de chances d’obtenir des informations. Dans le cas de <strong>Encrypt-then-MAC</strong>, le MAC est vérifé et s’il est incorrect, rejeté.  Une étape, aucun moyen d’obtenir des informations. Alors que dans le cas de <strong>MAC-then-Encrypt</strong>, comme le MAC est calculé à partir du message en clair il va falloir déchiffrer le message afin de vérifier le MAC. Un échec de déchiffrement (dû à un mauvais padding CBC par exemple) pourrait prendre moins de temps qu’il n’en faut pour la génération de l’échec de vérification du MAC, et donner du temps à l’attaquant pour accéder à des informations. Le problème est le même avec <strong>Encrypt-and-MAC</strong> .</em></p>

<p>Les choix possibles :</p>

<p>1  <del>hmac-md5</del></p>

<p>2  <del>hmac-md5-96</del></p>

<p>3  hmac-ripemd160</p>

<p>4  <del>hmac-sha1</del></p>

<p>5  <del>hmac-sha1-96</del></p>

<p>6  hmac-sha2-256</p>

<p>7  hmac-sha2-512</p>

<p>8  <del>umac-64</del></p>

<p>9  umac-128@openssh.com</p>

<p>10 <del>hmac-md5-etm@openssh com</del></p>

<p>11 <del>hmac-md5-96-etm@openssh com</del></p>

<p>12 hmac-ripemd160-etm@openssh.com</p>

<p>13 <del>hmac-sha1-etm@openssh com</del></p>

<p>14 <del>hmac-sha1-96-etm@openssh com</del></p>

<p>15 hmac-sha2-256-etm@openssh.com</p>

<p>16 hmac-sha2-512-etm@openssh.com</p>

<p>17 <del>umac-64-etm@openssh com</del></p>

<p>18 umac-128-etm@openssh.com</p>

<ul>
  <li>Sûreté et solidité de l’algorithme : pas de MD5 ni de SHA1</li>
  <li>La taille du tag : au moins 128 bits, ce qui élimine umac-64-etm</li>
  <li>La taille de clé : minimum 128 bits</li>
</ul>

<p>Extrait pour configuration serveur <strong>/etc/ssh/sshd_config</strong> :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
</code></pre></div></div>

<p>Et pour le client <strong>/etc/ssh/ssh_config</strong> :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
</code></pre></div></div>

<h2 id="précautions">
<a class="anchor" href="#pr%C3%A9cautions" aria-hidden="true"><span class="octicon octicon-link"></span></a>Précautions</h2>

<p>La fonctionnalité <strong>UseRoaming</strong>  présente une vulnérabilité , il faut la désactiver (client) dans <strong>/etc/ssh/ssh_config</strong> :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host *
   UseRoaming no
</code></pre></div></div>

<p>il est important de garder les  clés à l’abri des regards indiscrets.</p>

<h2 id="erreurs-et-debug">
<a class="anchor" href="#erreurs-et-debug" aria-hidden="true"><span class="octicon octicon-link"></span></a>Erreurs et debug</h2>

<ul>
  <li><a href="https://www.skyminds.net/resoudre-lerreur-ssh-missing-privilege-separation-directory-run-sshd/">Résoudre l’erreur SSH: Missing privilege separation directory: /run/sshd</a></li>
  <li><a href="https://www.tecmint.com/enable-debugging-mode-in-ssh/">Enable Debugging Mode in SSH to Troubleshoot Connectivity Issues</a></li>
  <li>
<a href="https://www.ssh.com/manuals/server-admin/61/ch09s01s01.html">Starting SSH Tectia Server in Debug Mode on Unix</a> : <code class="highlighter-rouge">/usr/bin/sshd -ddd</code>
</li>
</ul>

<h2 id="conclusion">
<a class="anchor" href="#conclusion" aria-hidden="true"><span class="octicon octicon-link"></span></a>Conclusion</h2>

<p>C’est certainement une bonne idée de tester tous les changements apportés. <strong>ssh -v</strong> apporte un certain nombre de détails, notamment les algorithmes utilisés, pratique pour déboguer rapidement. Soyez très prudent lorsque vous changez la configuration SSH d’une machine distante. Faites en sorte de toujours garder une session active, sans jamais redémarrer <strong>sshd</strong> avant d’être sûr de soit. Vous pouvez par ailleurs demander à OpenSSH de recharger la configuration sans redémarrer en utilisant un <strong>SIGHUP</strong>. Pour être à l’abri de tout risque, vous pouvez aussi démarrer temporairement un serveur SSH sur un nouveau port le temps de faire vos tests</p>

<ul>
  <li>
<a href="https://github.com/stribika/stribika.github.io/wiki/Secure-Secure-Shell">L’auteur de l’article original (<em>stribika</em>) a créé une page de wiki sur GitHub</a>  que tout le monde peut enrichir en proposant des configurations SSH sûres .</li>
  <li>
<a href="https://tls.imirhil.fr/ssh/">Ensemble d’outils  pour tester la solidité du chiffrement </a> , auteur <a href="https://imirhil.fr/">Aeris</a>
</li>
</ul>

<h2 id="redirection-locale--l-et-distante--r-port-forwarding--tunneling">
<a class="anchor" href="#redirection-locale--l-et-distante--r-port-forwarding--tunneling" aria-hidden="true"><span class="octicon octicon-link"></span></a>Redirection locale ‘-L’ et distante ‘-R’ (Port Forwarding) , tunneling</h2>

<p><em>La différence vient du sens de la connexion. Dans le relayage local, le client tcp et le client ssh sont sur la même machine. Dans le relayage distant ou “remote”, le client ssh est sur la même machine que le serveur tcp.</em></p>

<h3 id="comprendre-la-redirection-de-port-port-forwarding">
<a class="anchor" href="#comprendre-la-redirection-de-port-port-forwarding" aria-hidden="true"><span class="octicon octicon-link"></span></a>Comprendre la redirection de port (Port Forwarding</h3>

<ul>
  <li><a href="/files/html/Comprendre%20la%20redirection%20de%20port%20(Port%20Forwarding).htm">Comprendre la redirection de port (Port Forwarding)</a></li>
</ul>

<h3 id="tunneling-ssh">
<a class="anchor" href="#tunneling-ssh" aria-hidden="true"><span class="octicon octicon-link"></span></a>Tunneling SSH</h3>

<p><em>le Tunneling SSH va consister en l’établissement d’un tunnel construit avec le protocole SSH entre un client et un serveur</em></p>

<ul>
  <li><a href="/files/html/Tunneling%20SSH.htm">Tunneling SSH</a></li>
</ul>

<h3 id="tunnel-ssh-inversé">
<a class="anchor" href="#tunnel-ssh-invers%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Tunnel SSH inversé</h3>

<p><img src="/images/ssh_logo1.png" alt=""><br>
<em>Qu’est-ce que le tunnel SSH inversé  (Reverse SSH Tunneling)? (et comment l’utiliser)<br>
Besoin de SSH sur un ordinateur Linux distant inaccessible?<br>
Demandez-lui de vous appeler, puis creusez cette connexion pour obtenir votre propre session SSH distante.</em></p>

<p>Traduction du post <a href="https://www.howtogeek.com/428413/what-is-reverse-ssh-tunneling-and-how-to-use-it/">“What Is Reverse SSH Tunneling? (and How to Use It)”</a><br>
<a href="https://www.howtogeek.com/author/davidmckay/">Dave McKay</a> July 18, 2019, 9:00am EDT</p>

<h4 id="quand-utiliser-le-tunneling-ssh-inverse">
<a class="anchor" href="#quand-utiliser-le-tunneling-ssh-inverse" aria-hidden="true"><span class="octicon octicon-link"></span></a>Quand utiliser le tunneling SSH inverse</h4>

<p>Parfois, les ordinateurs distants peuvent être difficiles à atteindre. Le site sur lequel ils se trouvent peut avoir des règles de pare-feu strictes, ou peut-être l’administrateur local a-t-il configuré des règles complexes de traduction d’adresses réseau . Comment pouvez-vous atteindre un tel ordinateur si vous devez vous y connecter?</p>

<ul>
  <li>Établissons des étiquettes
    <ul>
      <li>Votre ordinateur est l’ordinateur local car il est proche de vous.</li>
      <li>L’ordinateur auquel vous allez vous connecter est l’ordinateur distant, car il se trouve dans un emplacement différent de celui où vous vous trouvez.</li>
    </ul>
  </li>
</ul>

<p>Pour différencier les ordinateurs locaux des ordinateurs distants utilisés dans cet article, l’ordinateur distant s’appelle «howtogeek» et exécute Ubuntu Linux (avec des fenêtres de terminal violettes). L’ordinateur local s’appelle «Sulaco» et exécute Manjaro Linux (avec des fenêtres de terminal jaunes).</p>

<p>Normalement, vous établissez une connexion SSH à partir de l’ordinateur local et vous connectez à l’ordinateur distant. Ce n’est pas une option dans le scénario de réseau que nous décrivons. Le problème spécifique du réseau importe peu: cela est utile lorsque vous ne pouvez pas utiliser SSH directement sur l’ordinateur distant.</p>

<p>Mais si la configuration réseau de votre côté est simple, l’ordinateur distant peut se connecter à vous. Toutefois, cela ne suffit pas à vos besoins, car cela ne vous fournit pas une session de ligne de commande opérationnelle sur l’ordinateur distant. Mais c’est un début. Vous avez une connexion établie entre les deux ordinateurs.</p>

<blockquote>
  <p>La réponse réside dans le tunnel SSH inversé (Reverse SSH Tunneling).</p>
</blockquote>

<h4 id="quest-ce-que-le-tunnel-ssh-inversé">
<a class="anchor" href="#quest-ce-que-le-tunnel-ssh-invers%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Qu’est-ce que le tunnel SSH inversé?</h4>

<p>Le tunneling SSH inversé vous permet d’utiliser la connexion établie pour établir une nouvelle connexion entre votre ordinateur local et l’ordinateur distant.</p>

<p>Parce que la connexion d’origine vous a été fournie par l’ordinateur distant, l’utiliser pour aller dans le sens opposé l’utilise «en sens inverse». Et parce que SSH est sécurisé, vous établissez une connexion sécurisée au sein d’une connexion sécurisée existante. Cela signifie que votre connexion à l’ordinateur distant agit comme un tunnel privé dans la connexion d’origine.</p>

<p>Et nous arrivons au nom de «tunnel SSH inversé (reverse SSH tunneling)».</p>

<h4 id="comment-ça-marche">
<a class="anchor" href="#comment-%C3%A7a-marche" aria-hidden="true"><span class="octicon octicon-link"></span></a>Comment ça marche?</h4>

<p>Le tunneling SSH inversé repose sur l’ordinateur distant qui utilise la connexion établie pour écouter les nouvelles demandes de connexion émanant de l’ordinateur local.</p>

<p>L’ordinateur distant écoute sur un port réseau de l’ordinateur local. S’il détecte une requête SSH sur ce port, il relaie cette requête à lui-même, via la connexion établie. Ceci fournit une nouvelle connexion de l’ordinateur local à l’ordinateur distant.</p>

<h4 id="utilisation-du-ssh-reverse-tunneling">
<a class="anchor" href="#utilisation-du-ssh-reverse-tunneling" aria-hidden="true"><span class="octicon octicon-link"></span></a>Utilisation du SSH Reverse Tunneling</h4>

<p>SSH sera déjà installé sur votre <u>ordinateur local</u> Linux, mais vous devrez peut-être démarrer le démon SSH (sshd) si l’ordinateur local n’a jamais utilisé les connexions SSH.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl start sshd 
</code></pre></div></div>

<p>Pour que le démon SSH démarre à chaque redémarrage de votre ordinateur, utilisez cette commande:</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl enable sshd
</code></pre></div></div>

<p>Sur l’<u>ordinateur distant</u>, nous utilisons la commande suivante.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh -R 43022:localhost:22 dave@sulaco.local
</code></pre></div></div>

<ul>
  <li>L’option <strong>-R (reverse)</strong> indique à ssh que de nouvelles sessions SSH doivent être créées sur l’ordinateur distant.</li>
  <li>
<strong>43022:localhost:22</strong> indique à ssh que les demandes de connexion au port 43022 de l’ordinateur local doivent être transmises au port 22 de l’ordinateur distant. Le port 43022 a été choisi car il est répertorié comme étant non alloué . Ce n’est pas un numéro spécial.</li>
  <li>
<strong>dave@sulaco.local</strong> est le compte d’utilisateur auquel l’ordinateur distant va se connecter sur l’ordinateur local.</li>
</ul>

<blockquote>
  <p><em>Vous pouvez être averti de ne jamais vous être connecté à l’ordinateur local auparavant. Vous pouvez également voir un avertissement lorsque les détails de la connexion sont ajoutés à la liste des hôtes SSH reconnus. Ce que vous voyez, le cas échéant, dépend du fait que des connexions aient déjà été établies entre l’ordinateur distant et l’ordinateur local.</em></p>
</blockquote>

<p>Vous serez invité à entrer le mot de passe du compte que vous utilisez pour vous connecter à l’ordinateur local.</p>

<p><img src="/images/ssh-reverse1.png" alt="Détails de la connexion SSH dans une fenêtre de terminal"></p>

<blockquote>
  <p>Notez que lorsque la connexion est établie, l’invite de commande passe de dave@howtogeek à dave@sulaco</p>
</blockquote>

<p>Nous sommes maintenant connectés à l’ordinateur local à partir de l’ordinateur distant. Cela signifie que nous pouvons lui donner des commandes. Utilisons la commande who pour voir les connexions sur l’ordinateur local.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>who
</code></pre></div></div>

<p><img src="/images/ssh-reverse2.png" alt="la commande who dans une fenêtre de terminal"></p>

<p>Nous pouvons voir que la personne avec le compte d’utilisateur appelé Dave a ouvert une session sur l’ordinateur local et que l’ordinateur distant s’est connecté (avec les mêmes informations d’identification d’utilisateur) à partir de l’adresse IP 192.168.4.25.</p>

<p>CONNEXES: <a href="https://www.howtogeek.com/410423/how-to-determine-the-current-user-account-in-linux/">How to Determine the Current User Account in Linux</a></p>

<h4 id="connexion-à-lordinateur-distant">
<a class="anchor" href="#connexion-%C3%A0-lordinateur-distant" aria-hidden="true"><span class="octicon octicon-link"></span></a>Connexion à l’ordinateur distant</h4>

<p>Comme la connexion à partir de l’ordinateur distant est réussie et qu’il écoute les connexions, vous pouvez essayer de vous connecter à l’ordinateur distant à partir de l’ordinateur local.</p>

<p>L’ordinateur distant écoute sur le port 43022 de l’ordinateur local. Donc, quelque peu contre-intuitif, pour établir une connexion avec l’ordinateur distant, nous demandons à ssh d’établir une connexion avec l’ordinateur local, sur le port 43022. Cette demande de connexion sera transmise à l’ordinateur distant.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh localhost -p 43022 
</code></pre></div></div>

<p>Nous sommes invités à entrer le mot de passe du compte utilisateur, puis à l’ordinateur local à partir de l’ordinateur distant.</p>

<p><img src="/images/ssh-reverse3.png" alt="connexion inverse du tunnel SSH à l'ordinateur distant"></p>

<p>Notez que l’invite de commande est passée de dave@sulaco à dave@howtogeek. Nous avons atteint notre objectif d’établir une connexion SSH avec un ordinateur distant difficile à atteindre.</p>

<h1 id="sshfs-pour-monter-des-dossiers-distants-dans-le-système-de-fichier-ssh--fuse">
<a class="anchor" href="#sshfs-pour-monter-des-dossiers-distants-dans-le-syst%C3%A8me-de-fichier-ssh--fuse" aria-hidden="true"><span class="octicon octicon-link"></span></a>SSHFS pour monter des dossiers distants dans le système de fichier (ssh + fuse)</h1>

<p><em>Sshfs est un outil permettant d’utiliser le protocole ssh comme un système de fichiers</em></p>

<h2 id="présentation-rapide">
<a class="anchor" href="#pr%C3%A9sentation-rapide" aria-hidden="true"><span class="octicon octicon-link"></span></a>Présentation rapide</h2>
<p><a href="https://fr.wikipedia.org/wiki/Secure_shell_file_system">SSHFS</a> permet d’utiliser un <a href="https://doc.ubuntu-fr.org/ssh">serveur ssh</a> afin de monter des dossiers distants disponibles dans le système de fichier grâce à <a href="https://fr.wikipedia.org/wiki/Filesystem_in_Userspace">fuse</a>.
Il ne nécessite côté serveur que openssh-server et côté client fuse openssh-client sshfs et éventuellement tor.
N’hésitez pas à signaler toute erreur/faute.</p>

<p>Ce tuto est une mise en forme de ces deux-ci :</p>

<ul>
  <li><a href="https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&amp;t=339&amp;p=847#p847">[Tuto/HowTo] Configurer et monter SSHFS sécurisé via utilisateur dédié côté serveur</a></li>
  <li><a href="https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&amp;t=339&amp;p=847#p893">[Tuto/HowTo] [GNU/Linux] Montage SSHFS cross-canal (Lan, Wan, Tor, etc)</a></li>
</ul>

<h2 id="liens">
<a class="anchor" href="#liens" aria-hidden="true"><span class="octicon octicon-link"></span></a>Liens</h2>
<ul>
  <li><a href="http://linux.die.net/man/8/adduser">Man Page adduser [EN]</a></li>
  <li><a href="https://192.168.1.65/forum4/viewtopic.php?f=40&amp;t=295">[Tuto/HowTo] [GNU/Linux] SSH</a></li>
  <li><a href="https://192.168.1.65/forum4/viewtopic.php?f=68&amp;t=288#p740">[Tuto/HowTo] Monter dossier distant sur Raspberry Pi &amp; Ubuntu/Debian</a></li>
  <li><a href="https://192.168.1.65/forum4/viewtopic.php?f=45&amp;t=159">[Tuto/HowTo] Garder un contrôle discret sur son serveur avec tor et ssh</a></li>
  <li><a href="http://www.linuxtricks.fr/wiki/autour-du-protocole-ssh-utiliser-le-canal-de-communication#paragraph_sshfs-systeme-de-fichiers-sur-ssh">LinuxTricks - Autour du protocole SSH, utiliser le canal de communication</a></li>
  <li><a href="https://linuxfr.org/users/elessar/journaux/sshfs-est-un-vrai-systeme-de-fichiers-en-reseau">LinuxFR Journal - SSHFS est un vrai système de fichiers en réseau</a></li>
</ul>

<h2 id="configuration-sshfs-de-base-client-serveur">
<a class="anchor" href="#configuration-sshfs-de-base-client-serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>Configuration SSHFS de base client serveur</h2>

<p><em>Note : Les paquets “openssh-client” et “fuse-utils” sont requis, mais il sont déjà installés par défaut</em></p>

<h3 id="client">
<a class="anchor" href="#client" aria-hidden="true"><span class="octicon octicon-link"></span></a>client</h3>

<p>Il faut disposer d’un serveur ssh focntionnel</p>

<h3 id="serveur">
<a class="anchor" href="#serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>serveur</h3>

<p>Installer sshfs</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt update &amp;&amp; sudo apt install sshfs # debian
sudo pacman -S sshfs  # archlinux/manjaro
</code></pre></div></div>

<h3 id="test-rapide">
<a class="anchor" href="#test-rapide" aria-hidden="true"><span class="octicon octicon-link"></span></a>Test rapide</h3>

<p>Sur le système client, créer un répertoire dans lequel va être monté le système de fichiers :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir /home/utilisateur/Test
</code></pre></div></div>

<p>Monter un répertoire distant (ici ~/Public):</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sshfs utilisateur@ip_distante:/home/utilisateur/Public /home/utilisateur/Test
</code></pre></div></div>

<p>Le mot de passe de l’utilisateur est alors demandé.</p>

<p>Ouvrir l gestionnaire de fichiers pour accèder à vos fichiers distants.</p>

<p>Enfin, penser à démonter :</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fusermount -u /home/utilisateur/Test
</code></pre></div></div>

<h3 id="sshfs-avec-clés-et-port-différent">
<a class="anchor" href="#sshfs-avec-cl%C3%A9s-et-port-diff%C3%A9rent" aria-hidden="true"><span class="octicon octicon-link"></span></a>SSHFS avec clés et port différent</h3>

<p><code class="highlighter-rouge">sshfs -oIdentityFile=&lt;clé privée&gt; utilisateur@domaine.tld:&lt;dossier distant&gt; &lt;dossier local&gt; -C -p &lt;port si différent de 22&gt;</code></p>

<h2 id="configurer-le-serveur-ssh">
<a class="anchor" href="#configurer-le-serveur-ssh" aria-hidden="true"><span class="octicon octicon-link"></span></a>Configurer le serveur SSH</h2>

<h3 id="installez-les-pré-requis">
<a class="anchor" href="#installez-les-pr%C3%A9-requis" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install tor openssh-server
</code></pre></div></div>

<h3 id="créez-un-utilisateur-dédié">
<a class="anchor" href="#cr%C3%A9ez-un-utilisateur-d%C3%A9di%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créez un utilisateur dédié</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo adduser userCommunSFTP
</code></pre></div></div>

<h3 id="générez-de-nouvelles-clés-de-sécurité-pour-lutilisateur-précédemment-créé">
<a class="anchor" href="#g%C3%A9n%C3%A9rez-de-nouvelles-cl%C3%A9s-de-s%C3%A9curit%C3%A9-pour-lutilisateur-pr%C3%A9c%C3%A9demment-cr%C3%A9%C3%A9" aria-hidden="true"><span class="octicon octicon-link"></span></a>Générez de nouvelles clés de sécurité pour l’utilisateur précédemment créé</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>su userCommunSFTP
ssh-keygen -t ed25519 -o -a 1666
ssh-keygen -t rsa -b 4096 -o -a 1666
</code></pre></div></div>

<h2 id="configurer-les-clients-gnulinux">
<a class="anchor" href="#configurer-les-clients-gnulinux" aria-hidden="true"><span class="octicon octicon-link"></span></a>Configurer le(s) client(s) GNU/Linux</h2>

<h3 id="installez-les-pré-requis-1">
<a class="anchor" href="#installez-les-pr%C3%A9-requis-1" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install openssh-client sshfs fuse
</code></pre></div></div>

<h3 id="si-vous-ne-lavez-jamais-fait-depuis-votre-installation-générez-de-nouvelles-clés">
<a class="anchor" href="#si-vous-ne-lavez-jamais-fait-depuis-votre-installation-g%C3%A9n%C3%A9rez-de-nouvelles-cl%C3%A9s" aria-hidden="true"><span class="octicon octicon-link"></span></a>Si vous ne l’avez jamais fait depuis votre installation, générez de nouvelles clés</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen -t ed25519 -o -a 16669
ssh-keygen -t rsa -b 4096 -o -a 16669
</code></pre></div></div>

<p><strong>-o -a 100</strong> : permet de faire boucler l’algorithme 100 fois
<strong>-b 4096</strong> : précise qu’on veut une clé à 4096 bits (au début des années 2k la France interdisait plus de 126 bit ;) )
<strong>-t rsa</strong> : on utilise l’<a href="https://fr.wikipedia.org/wiki/Chiffrement_RSA">algorithme RSA</a>
<strong>-t ed25519</strong> : on utilise l’<a href="https://fr.wikipedia.org/wiki/EdDSA">algorithme EdDSA</a></p>

<h3 id="exportez-votre-clé-publique-sur-le-serveur">
<a class="anchor" href="#exportez-votre-cl%C3%A9-publique-sur-le-serveur" aria-hidden="true"><span class="octicon octicon-link"></span></a>Exportez votre clé publique sur le serveur</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id -i ~/.ssh/id_ed25519.pub userCommunSFTP@adresseServerSSH
</code></pre></div></div>

<h3 id="ajoutez-votre-utilisateur-à-la-liste-des-utilisateurs-autorisés-à-utiliser-fuse">
<a class="anchor" href="#ajoutez-votre-utilisateur-%C3%A0-la-liste-des-utilisateurs-autoris%C3%A9s-%C3%A0-utiliser-fuse" aria-hidden="true"><span class="octicon octicon-link"></span></a>Ajoutez votre utilisateur à la liste des utilisateurs autorisés à utiliser fuse</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo adduser $USER fuse
</code></pre></div></div>

<ul>
  <li>
<strong>Note :</strong> remplacez $USER par l’utilisateur de votre choix (par défaut $USER = votre utilisateur courant (celui qui a ouvert la session sur votre machine)). Sur Raspberry Pi cette commande peut échouer sans que cela ne pose problème.</li>
</ul>

<h3 id="autoriser-les-autres-utilisateurs-à-monter-un-dossier-avec-fusermount">
<a class="anchor" href="#autoriser-les-autres-utilisateurs-%C3%A0-monter-un-dossier-avec-fusermount" aria-hidden="true"><span class="octicon octicon-link"></span></a>Autoriser les autres utilisateurs à monter un dossier avec fusermount</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/fuse.conf
</code></pre></div></div>

<ul>
  <li>Décommentez (enlevez le # devant) <strong>user_allow_other</strong> puis tapez <strong>CTRL+X</strong> pour sauver et quitter.</li>
</ul>

<p><strong>Pour effectuer le montage SSHFS au démarrage il est fort possible que la machine passe par root.</strong></p>

<h3 id="connectez-vous-en-root-admin">
<a class="anchor" href="#connectez-vous-en-root-admin" aria-hidden="true"><span class="octicon octicon-link"></span></a>Connectez-vous en root (admin)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo su
</code></pre></div></div>

<h3 id="générez-une-paire-de-clés-solide-pour-root">
<a class="anchor" href="#g%C3%A9n%C3%A9rez-une-paire-de-cl%C3%A9s-solide-pour-root" aria-hidden="true"><span class="octicon octicon-link"></span></a>Générez une paire de clés solide pour root</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen -t rsa -b 4096 -o -a 16666
ssh-keygen -t ed25519 -o -a 16666
</code></pre></div></div>

<ul>
  <li>La deuxième (ed25519) ne fonctionne pas sur Raspberry Pi</li>
</ul>

<h3 id="exportez-la-clé-publique-de-root-sur-la-machine-distante">
<a class="anchor" href="#exportez-la-cl%C3%A9-publique-de-root-sur-la-machine-distante" aria-hidden="true"><span class="octicon octicon-link"></span></a>Exportez la clé publique de root sur la machine distante</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id -i /root/.ssh/id_rsa.pub userCommunSFTP@adresseServerSSH

</code></pre></div></div>

<h3 id="testez-si-lajout-a-bien-fonctionné-ne-doit-pas-demander-de-mot-de-passe">
<a class="anchor" href="#testez-si-lajout-a-bien-fonctionn%C3%A9-ne-doit-pas-demander-de-mot-de-passe" aria-hidden="true"><span class="octicon octicon-link"></span></a>Testez si l’ajout a bien fonctionné (ne doit pas demander de mot de passe)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh userCommunSFTP@adresseServerSSH
</code></pre></div></div>

<h3 id="quittez-root">
<a class="anchor" href="#quittez-root" aria-hidden="true"><span class="octicon octicon-link"></span></a>Quittez root</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exit
</code></pre></div></div>

<h2 id="montage-au-démarrage-sur-les-clients-via-fstab-et-hostname-fixe">
<a class="anchor" href="#montage-au-d%C3%A9marrage-sur-les-clients-via-fstab-et-hostname-fixe" aria-hidden="true"><span class="octicon octicon-link"></span></a>Montage au démarrage sur le(s) client(s) via fstab et hostname fixe</h2>
<h3 id="installez-les-pré-requis-2">
<a class="anchor" href="#installez-les-pr%C3%A9-requis-2" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install openssh-client
</code></pre></div></div>

<h3 id="créer-le-point-de-montage-local-adaptez-à-vos-envies">
<a class="anchor" href="#cr%C3%A9er-le-point-de-montage-local-adaptez-%C3%A0-vos-envies" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créer le point de montage local (adaptez à vos envies)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo mkdir /media/monPointDeMontageLocal
</code></pre></div></div>

<h3 id="accorder-les-bons-droits-à-notre-point-de-montage">
<a class="anchor" href="#accorder-les-bons-droits-%C3%A0-notre-point-de-montage" aria-hidden="true"><span class="octicon octicon-link"></span></a>Accorder les bons droits à notre point de montage</h3>
<ul>
  <li>Spécifiez les propriétaires</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chown root:$USER -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>
    <p><strong>Note :</strong> $USER = votre utilisateur courant par défaut, changez si besoin</p>
  </li>
  <li>
    <p>Spécifiez aussi les droits d’accès des propriétaires</p>
  </li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chmod 770 -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>Note : si vous souhaitez que le montage soit accessible à tous vos utilisateurs systèmes remplacez 770 par 774 pour lecture uniquement ou 777 s’ils (tous les utilisateurs) peuvent avoir les mêmes droits que votre utilisateur principal sur ce point de montage. ( voir <a href="https://fr.wikipedia.org/wiki/Chmod#Modes">chmod</a> )</li>
</ul>

<h3 id="éditez-le-fichier-etcfstab-ctrlx-pour-sauverquitter">
<a class="anchor" href="#%C3%A9ditez-le-fichier-etcfstab-ctrlx-pour-sauverquitter" aria-hidden="true"><span class="octicon octicon-link"></span></a>Éditez le fichier <em>/etc/fstab</em> (CTRL+X pour sauver&amp;quitter)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/fstab
</code></pre></div></div>

<h3 id="ajoutez-le-montage-afin-de-le-monter-au-boot">
<a class="anchor" href="#ajoutez-le-montage-afin-de-le-monter-au-boot" aria-hidden="true"><span class="octicon octicon-link"></span></a>Ajoutez le montage afin de le monter au boot</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>userCommunSFTP@adresseServerSSH:/home/userCommunSFTP/                /media/monPointDeMontageLocal          fuse.sshfs           port=22,user,noatime,reconnect,_netdev,nofail,allow_other     0 0
</code></pre></div></div>
<ul>
  <li>
<strong>Note :</strong> <em>:/dossier/distant/</em> n’est pas obligatoire ; <em>nofail</em> permet d’empêcher le boot de crasher si le montage ne réussit pas, <em>_netdev</em> ordonne d’attendre que le réseau soit fonctionnel avant d’effectuer le montage; <em>allow_other</em> autorise les autres utilisateurs à monter le dossier. Ajoutez <em>noauto</em> si vous voulez que le montage ne s’effectue qu’à la demande et non au démarrage de la machine.</li>
</ul>

<h3 id="testez-votre-montage">
<a class="anchor" href="#testez-votre-montage" aria-hidden="true"><span class="octicon octicon-link"></span></a>Testez votre montage</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo mount /media/monPointDeMontageLocal
</code></pre></div></div>

<h2 id="montage-au-démarrage-sur-les-clients-via-script-diy-compatible-cross-canal-lan-wan-tor">
<a class="anchor" href="#montage-au-d%C3%A9marrage-sur-les-clients-via-script-diy-compatible-cross-canal-lan-wan-tor" aria-hidden="true"><span class="octicon octicon-link"></span></a>Montage au démarrage sur le(s) client(s) via script DIY compatible cross-canal (LAN, WAN, TOR)</h2>
<h3 id="installez-les-pré-requis-3">
<a class="anchor" href="#installez-les-pr%C3%A9-requis-3" aria-hidden="true"><span class="octicon octicon-link"></span></a>Installez les pré-requis</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install openssh-client tor
</code></pre></div></div>

<h3 id="créer-le-point-de-montage-local-adaptez-le-à-vos-envies">
<a class="anchor" href="#cr%C3%A9er-le-point-de-montage-local-adaptez-le-%C3%A0-vos-envies" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créer le point de montage local (adaptez-le à vos envies)</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo mkdir /media/monPointDeMontageLocal
</code></pre></div></div>

<h3 id="accorder-les-bons-droits-à-notre-point-de-montage-1">
<a class="anchor" href="#accorder-les-bons-droits-%C3%A0-notre-point-de-montage-1" aria-hidden="true"><span class="octicon octicon-link"></span></a>Accorder les bons droits à notre point de montage</h3>
<ul>
  <li>Spécifiez les propriétaires</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chown root:$USER -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>
    <p><strong>Note :</strong> $USER = votre utilisateur courant par défaut, changez si besoin</p>
  </li>
  <li>
    <p>Spécifiez aussi les droits d’accès des propriétaires</p>
  </li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chmod 770 -R /media/monPointDeMontageLocal
</code></pre></div></div>

<ul>
  <li>
<strong>Note :</strong> si vous souhaitez que le montage soit accessible à tous vos utilisateurs système remplacez 770 par 774 pour lecture uniquement ou 777 s’ils (tous les utilisateurs) peuvent avoir les mêmes droits que votre utilisateur principal sur ce point de montage. ( voir chmod )</li>
</ul>

<h3 id="créez-le-script">
<a class="anchor" href="#cr%C3%A9ez-le-script" aria-hidden="true"><span class="octicon octicon-link"></span></a>Créez le script</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

<h3 id="collez-le-code-suivant-en-ladaptant">
<a class="anchor" href="#collez-le-code-suivant-en-ladaptant" aria-hidden="true"><span class="octicon octicon-link"></span></a>Collez le code suivant en l’adaptant</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
<span class="c">#licence WTFPL - script infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&amp;t=339&amp;p=893#p893</span>
<span class="c">#github : https://github.com/voxdemonix/divers-script/blob/master/mountSSHFS_crosscanal.sh</span>
<span class="c">#work on raspbian, ubuntu, debian and possibly Arch</span>


<span class="k">if</span> <span class="o">[</span> <span class="o">!</span> <span class="s2">"</span><span class="nv">$SUDO_USER</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nb">echo</span> <span class="s2">"i need root =&gt; </span><span class="nv">$0</span><span class="s2">"</span>
<span class="nb">exit </span>0
<span class="k">fi
</span><span class="nb">sleep </span>60 <span class="c"># petit délai d'attente afin que le réseau soit prêt</span>


<span class="nv">IpServerLocale</span><span class="o">=</span><span class="s2">"192.168.1.42"</span> <span class="c"># server IP LAN</span>
<span class="nv">AdresseServerOnion</span><span class="o">=</span><span class="s2">"blablablablabla1.onion"</span> <span class="c"># tor hidden service OR Hostname WAN</span>
<span class="nv">MacServerLocale</span><span class="o">=</span><span class="s2">"00:00:00:00:00:00"</span> <span class="c">#l'adresse mac du serveur SSH (tapez ifconfig dans un terminal sur votre server pour la voir)</span>
<span class="nv">UserRemoteForSsh</span><span class="o">=</span><span class="s2">"user_sur_server"</span> <span class="c"># l'utilisateur à utiliser côté serveur ( /!\ n'utilisez jamais root !)</span>
<span class="nv">port</span><span class="o">=</span><span class="s2">"22"</span> <span class="c"># le port sur le server</span>
<span class="nv">monPointDeMontageLocal</span><span class="o">=</span><span class="s2">"/media/monPointDeMontageLocal"</span>
<span class="nv">monPointDeMontageDistant</span><span class="o">=</span><span class="s2">"/home/user_sur_serveur/"</span>

umount <span class="nv">$monPointDeMontageLocal</span> <span class="nt">-f</span> <span class="o">&gt;&gt;</span> /dev/null 2&gt;&amp;1
ping <span class="nv">$IpServerLocale</span> <span class="nt">-c</span> 1 <span class="o">&gt;&gt;</span> /dev/null 2&gt;&amp;1
<span class="nv">macRecover</span><span class="o">=</span><span class="si">$(</span>arp <span class="nt">-n</span> | <span class="nb">grep</span> <span class="nt">-i</span> <span class="nt">-o</span> <span class="nv">$MacServerLocale</span><span class="si">)</span>

<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$macRecover</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"</span><span class="nv">$MacServerLocale</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
   </span>sshfs <span class="nt">-o</span> allow_other <span class="nt">-o</span> reconnect <span class="nt">-o</span> <span class="nv">ServerAliveInterval</span><span class="o">=</span>15 <span class="nv">$UserRemoteForSsh</span>@<span class="nv">$IpServerLocale</span>:<span class="nv">$monPointDeMontageDistant</span> <span class="nv">$monPointDeMontageLocal</span> <span class="nt">-p</span> <span class="nv">$port</span> <span class="nt">-C</span>
<span class="k">else
   </span>sshfs <span class="nt">-o</span> allow_other <span class="nt">-o</span> reconnect <span class="nt">-o</span> <span class="nv">ServerAliveInterval</span><span class="o">=</span>15 <span class="nv">$UserRemoteForSsh</span>@<span class="nv">$AdresseServerOnion</span>:<span class="nv">$monPointDeMontageDistant</span> <span class="nv">$monPointDeMontageLocal</span> <span class="nt">-p</span> <span class="nv">$port</span> <span class="nt">-C</span>
<span class="k">fi</span>
</code></pre></div></div>

<ul>
  <li>
<strong>IpServerLocale=”192.168.1.42”</strong> =&gt; l’adresse IP LAN de votre serveur</li>
  <li>
<strong>AdresseServerOnion=”blablablablabla1.onion”</strong> =&gt; l’hostname de votre serveur. Au choix un Tor Hidden Service, une IP WAn ou un Hostname WAN (exemple.com)</li>
  <li>
<strong>MacServerLocale=”00:00:00:00:00:00”</strong> =&gt; l’adresse MAC de votre server (tapez ifconfig sur votre serveur pour la voir)</li>
  <li>
<strong>UserRemoteForSsh=”user_sur_server”</strong> =&gt; utilisateur sur le serveur SSH à utiliser pour la connexion</li>
  <li>
<strong>port=”22”</strong> =&gt; le port d’écoute du serveur ssh (par défaut 22)</li>
  <li>
<strong>monPointDeMontageLocal=”/media/monPointDeMontageLocal”</strong> =&gt; où rendre disponible le montage sur votre client</li>
  <li>
<strong>monPointDeMontageDistant=”/home/user_sur_server/”</strong> =&gt; Le dossier sur le serveur à partir du quel effectuer le montage</li>
</ul>

<h3 id="rendez-le-script-exécutable">
<a class="anchor" href="#rendez-le-script-ex%C3%A9cutable" aria-hidden="true"><span class="octicon octicon-link"></span></a>Rendez le script exécutable</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chmod +x /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

<h3 id="lancez-le-au-boot-en-éditant-etcrclocal">
<a class="anchor" href="#lancez-le-au-boot-en-%C3%A9ditant-etcrclocal" aria-hidden="true"><span class="octicon octicon-link"></span></a>Lancez-le au boot en éditant /etc/rc.local</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/rc.local
</code></pre></div></div>

<ul>
  <li>Et ajoutez la ligne suivante <strong>avant “exit 0”</strong> ###</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

<h3 id="rendez-compatible-votre-client-ssh-avec-le-réseau-tor">
<a class="anchor" href="#rendez-compatible-votre-client-ssh-avec-le-r%C3%A9seau-tor" aria-hidden="true"><span class="octicon octicon-link"></span></a>Rendez compatible votre client SSH avec le réseau tor</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/ssh/ssh_config
</code></pre></div></div>

<ul>
  <li>Et collez les lignes suivantes puis tapez <strong>CTRL+X</strong> pour sauver&amp;quitter</li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    Host *.onion
       ProxyCommand nc -xlocalhost:9050 -X5 %h %p
</code></pre></div></div>

<h3 id="testez-votre-montage-1">
<a class="anchor" href="#testez-votre-montage-1" aria-hidden="true"><span class="octicon octicon-link"></span></a>Testez votre montage</h3>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo /opt/scripts/mountSSHFS.sh
</code></pre></div></div>

	  </div>

		
		<ul class="tag_box list-unstyled list-inline">
		  <li><i class="fa fa-folder-open"></i></li>
		  
		  
			 
				<li><a href="/categories.html#linux-ref">
					linux <span>(93)</span>
					
				</a></li>
			
		  
		</ul>
		  

		
		<ul class="list-inline">
		  <li><i class="fa fa-tags"></i></li>
		  
		  
			 
				<li>
					<a href="/tags.html#cli-ref">
					cli <span>(13)</span>
					,
					</a>
				</li>
			 
				<li>
					<a href="/tags.html#ssh-ref">
					ssh <span>(3)</span>
					
					</a>
				</li>
			
		  
		  
		</ul>
		  


    <div class="clearfix"></div>

	</div>
	
</article>
<div class="clearfix"></div>



</div>

Autre solution de recherche

Recherche avec “Simple-Jekyll-Search”