Archives de catégorie : SSH

Gestion des clefs SSH avec Rudder

Rudder est un outil que j’utilise depuis quelques années maintenant et qui évolue régulièrement. Voici un exemple de ce qu’il est possible de faire avec pour gérer ses clefs SSH.

Rudder, c’est quoi ?

Rudder est un outil de configuration continue et d’audit. Pour résumer, nous lui donnons des directives (règles, configurations, etc…) et il s’assurent qu’elles soient tout le temps appliquées de la façon dont nous les avons définies.

Gestion des clefs SSH :

Lorsque nous devons gérer un parc de machines Linux et que nous devons y autoriser nos clefs SSH, il est fastidieux d’établir une bonne gestion sans outils. Voici comment utiliser Rudder afin de déployer nos clefs SSH sur un groupe de machines.

Continuer la lecture de Gestion des clefs SSH avec Rudder

ssh sudo git … let’s go !

Comment utiliser Git sur une machine distante en SSH et via la commande sudo ?

Voici la problématique en détail pour mieux comprendre le principe.

Vous êtes sur votre ordinateur et vous vous connectez sur un serveur distant via SSH. Pas de problème votre clef est utilisée et vous êtes sur le shell. Maintenant vous devez utiliser la commande git dans un dossier qui n’est accessible que par le compte root et c’est là que le problème intervient. En utilisant la commande sudo, vous exécutez la commande en tant que root et non en tant que votre utilisateur … Voici la procédure à suivre pour faire le tout sans vous prendre la tête.

Connexion SSH

La connexion ssh à une machine avec une authentification par clef est très simple (la configuration du serveur n’est pas abordée ici). Vous aurez tout d’abord dû copier votre clef via la commande :

$ ssh-copy-id user@monserveur

Première chose à faire pour vous connecter à votre serveur est d’utiliser l’option -A de d’OpenSSH :

$ ssh -A user@monserveur

Elle permet d’emporter avec vous votre identité.

Commande sudo

Une fois sur votre machine distante, vous utilisez la commande sudo qui permet entre autre de réaliser des commandes qui nécessites d’être root.

Pour lui dire d’importer avec elle votre identité qui est nécessaire pour utiliser git, vous devez utiliser le paramètre -E comme ceci :

$ cd /etc/myrepo
$ sudo -E git pull

Conclusion

Pour résumer, vous vous connectez en ssh en emportant votre identité puis vous vous servez de la commande sudo pour jouer avec git tout en important également votre identité qui vous permet de vous connecter à vos repos git.

SSH -> SUDO -> GIT


Utiliser PowerShell via SSH

Voici une solution permettant d’interagir avec un ordinateur sous Windows depuis un ordinateur sous Linux ou MacOS. La solution utilisée reste relativement simple à mettre en place et utilise des standards. Nous utiliserons Windows Server 2012R2 et un client Linux.

Installation côté Windows

PowerShell :

Récupérez la dernière version de PowerShell pour Windows ici : https://github.com/PowerShell/PowerShell Ici nous utiliserons la version 6.0.4 dans toute la suite de l’article. L’installeur Windows va placer les fichiers ici : C:\Program Files\PowerShell\6.0.4\

OpenSSH :

Récupérez la dernière version de PowerShell pour Windows ici : https://github.com/PowerShell/Win32-OpenSSH/releases/download/v7.7.2.0p1-Beta/OpenSSH-Win64.zip Pour l’installer, je vous recommande de dé-zippez son contenu à la racine du disque sur C:\. Ouvrez une invite de commande PowerShell en mode administrateur et effectuez les commandes suivantes :

PS: cd C:\OpenSSH-Win64\
PS: powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
PS: cmd /c /D mklink c:\pwsh "C:\Program Files\PowerShell\6.0.4"

Il faut aller éditer le fichier de configuration sshd_config situé dans le dossier C:\ProgramData\ssh\ et assurez vous d’avoir les paramètres suivants :

PasswordAuthentication yes
Subsystem powershell c:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile

Maintenant il suffit de lancer le service

PS: net ssh start

Path OpenSSH

Il est aussi indispensable de configurer la variable d’environnement « path » pour que les commandes SSH soient reconnues par le système. Pour cela, rendez-vous dans l’application « Modifier les variables d’environnement système ».

Sélectionnez ensuite « path » et cliquez sur « Modifier… ».

Rajoutez le texte suivant à la fin de la ligne (sans oublier le ; ) et validez.

;C:\OpenSSH-Win64\

Installation côté Linux

Pour la partie Linux, pas besoin de SSH il est normalement déjà installé sur votre machine d’administration. La méthode d’installation de PowerShell est la méthode universelle mais sachez que des paquets pour diverses distributions existes (Debian, Red-Hat).
Téléchargez la version stable en cours ici :

https://github.com/PowerShell/PowerShell/releases/tag/v6.0.4

Les commandes suivantes suffisent :

$ wget https://github.com/PowerShell/PowerShell/releases/download/v6.0.4/powershell-6.0.4-linux-x64.tar.gz
$ tar -xvzf powershell-6.0.4-linux-x64.tar.gz
$ cd powershell-6.0.4-linux-x64

Utilisation

Maintenant que tout est installé, voici comment accéder en ssh à votre serveur Windows et y exécuter des commandes via PowerShell. Cette partie reprend la documentation officielle de Microsoft.

Dans le dossier où se trouve PowerShell, lancez le script pwsh

./pwsh
PS /powershell-6.0.4-linux-x64>

Créez ensuite la connexion au serveur :

> $session = New-PSSession -HostName srv.example.com -UserName Administrateur

Vous allez devoir accepter le certificat la première fois et indiquer votre mot de passe. Vérifions que la sessions est bien là :

> $session

Si vous souhaitez vous connecter sur le Shell distant, voici la commande :

> Enter-PSSession $session

Et si vous souhaitez exécuter votre script « script.ps » situé à la racine du disque C sur la machine distante, voici ce qu’il faut faire :

> Invoke-Command $session -ScriptBlock { C:\script.ps1 }

Configuration OpenSSH (6.4)

OpenSSH est un logiciel qui permet d’utiliser le protocole SSH pour l’accès à distance sur des machines Linux et le transfert de fichiers de manière sécurisé.

Site officiel du projet : http://www.openbsd.org/openssh/fr/index.html

Voici la configuration détaillée d’un serveur ssh réalisé à l’aide d’OpenSSH (ici en version 6.4)  qui se trouve dans le fichier /etc/ssh/sshd_config

Port 22
Protocol 2
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
AllowUsers john
PermitEmptyPasswords no
UsePAM yes
X11Forwarding no
PrintLastLog yes
UsePrivilegeSeparation sandbox

Les directives Port et Protocol sont optionnelles puisque ces valeurs sont celles présentes par défaut.

SyslogFacility et LogLevel permet d’activer les logs d’OpenSSH de façon suffisante pour pouvoir les traiter avec Fail2ban par exemple.

LoginGraceTime indique le temps maximum pour s’identifier avant que la connexion soit coupée.  Ici 2 minutes.

PermitRootLogin interdit ici la connexion directe de l’utilisateur root. Même avec le bon mot de passe, vous ne pourrez pas vous connecter en root directement. Il convient d’utiliser un simple utilisateur pour se connecter en ssh puis de passer root ensuite. L’utilisateur doit faire partie du groupe wheel.

# gpasswd -a john wheel

StrictModes permet de vérifier les autorisations des utilisateurs.

AllowUsers indique les utilisateurs ayant le droit de se connecter. Cette directive est à associer à PermitRootLogin. Au final, root ne peut jamais se connecter et seul john le peut même si d’autres utilisateurs sont présents sur la machine.

PermitEmptyPasswords interdit la connexion avec un mot de passe nul.

UsePAM utilise PAM pour vérifier les utilisateurs.

X11Forwarding interdit l’affichage à distance d’un environnement graphique.

PrintLastLog affiche la date, l’heure et l’ip de la dernière connexion juste après la connexion.

UsePrivilegeSeparation permet d’isoler via un processus fils la connexion d’un utilisateur avant de créer un nouveau processus avec les droits de cet utilisateur lorsque celui-ci est bien authentifié.

Vous trouverez sur le site officiel toutes les directives : http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config

N’hésitez pas à commenter !