#306

Se connecter avec une clé SSH à un serveur distant

Je cherchais à me connecter à un serveur distant sans avoir besoin de me connecter avec un mot de passe. J’avais fait la manipulation il y a  quelque mois, mais bien entendu je n’avais rien noté à l’époque. Voici donc en quelques lignes la méthode que j’ai adoptée.

Qu’est-ce qu’une clé ssh ?

Naïvement, je pensais qu’une clé ssh était associée à un utilisateur donné sur la machine cliente (celle à partir de laquelle on cherche à se connecter). En fait une clé ssh est un certificat avec une partie publique (que vous installerez sur la machine sur laquelle vous souhaitez vous connecter) et une partie privée que vous garderez précieusement sur votre machine cliente.

Si j’ai bien compris, lorsque vous vous connectez en ssh à une machine distante, le client ssh regarde tous les certificats dont vous disposez, et vérifie si la partie publique de ce certificat est connue par la machine distante pour l’utilisateur avec lequel vous vous connectez.

Ainsi, si en tapant la commande suivante :

ssh user@myserver.org

Le client ssh va vérifier si un des certificats ssh dont vous disposez sur votre machine pour votre utilisateur est disponible pour l’utilisateur user sur la machine distante. Si ce n’est pas le cas, il vous proposera l’authentification par mot de passe.

Bien entendu, ces comportements dépendent également de la configuration du serveur ssh sur la machine distante (/etc/ssh/sshd_config sur Ubuntu).

Créer la clé ssh

Note : vous remplacez bien sûr dans les exemples suivants user et myserver.org par le nom de l’utilisateur distant et de la machine distante.

Pour créer une clé SSH, nous allons utiliser la commande ssh-gen. Ouvrez votre terminal et tapez les commandes suivantes :

cd ~/.ssh
ssh-keygen -t rsa
Créer un certificat ssh

Créer un certificat ssh

Le programme ssh-keygen va vous demander le nom du fichier (que vous pouvez nommer comme vous le souhaitez, par exemple user_rsa), ainsi qu’un mot de passe que vous prendrez soin de rendre suffisamment fort. ssh-keygen crée deux fichiers : le fichier user_rsa, clé privée à conserver précieusement, et le fichier user_rsa.pub, clé publique que nous allons déployer sur la machine distante.

Avant de déployer le certificat, ajoutons cette nouvelle clé en ajoutant dans le fichier ~/.ssh/config les lignes suivantes :

Host myserver
 Hostname myserver.org
 User myuser
 PreferredAuthentications publickey
 IdentityFile /Users/MyUser/.ssh/myuser_rsa

Une fois cette modification effectuée, vous pouvez vous connecter en tapant :

ssh myserver

Déployer le certificat sur la machine distante

Pour déployer votre certificat, vous devez l’ajouter au fichier authorized_keys du répertoire .ssh de l’utilisateur de la machine distante avec lequel vous souhaitez vous connecter ; vous procéderez comme suit :

scp ~/.ssh/user_rsa.pub remote_user@myserver.org:

N’oubliez pas les deux points derrière le nom de la machine distante. Connectez-vous ensuite avec l’utilisateur de la machine distante auquel vous souhaitez associer le certificat :

ssh user@myserver.org

Optionnel : si le répertoire .ssh n’existes pas sur le répertoire home de l’utilisateur, il faut le créer :

mkdir ~/.ssh

Nous allons ajouter la clé publique au fichier authorized_keys avec la commande cat, puis supprimer le fichier pub qui ne nous sert à rien, et restreindre la modification et la lecture du fichier authorized_keys au seul utilisateur courant :

cat ~/user_rsa.pub >> ~/.ssh/authorized_keys
rm ~/user_rsa.pub
chmod 600 ~/.ssh/authorized_keys

Déconnectez vous de la machine distante (exit), puis tapez :

ssh user@myserver.org

Le client ssh vous demandera peut-être le mot de passe associé au certificat et tapé lors de sa création. Si tout se passe bien, vous devriez être ensuite connecté à la machine distante !

Si ça ne se passe pas comme prévu

Un truc à connaître est l’option -v  de la commande ssh, qui permet d’avoir l’affichage à l’écran de l’ensemble des opérations de connexion à la machine distante.

via ArchiWiki

Transférer sa bibliothèque iTunes (et les sauvegardes iOS) sur un disque externe

Heureux possesseur d’un MacBook Air acheté pour commencer le développement iOS, je me suis vite retrouvé confronté au problème de l’espace disque sur le SSD interne de 64Go de la machine. Une des solutions pour faire de la place, c’est bien entendu d’utiliser un disque externe pour tous les fichiers volumineux : images de disques Virtual Box, apps iOS, vidéos, et musique. Voici comment j’ai procédé pour transférer ma bibliothèque iTunes sur mon disque externe.

Transférer la bibliothèque iTunes

Attention : cette procédure ne vaut que si vous avez regroupé tous vos fichiers musique au sein du dossier iTunes Media.

  • Quitter iTunes si ce dernier est ouvert
  • Copier le dossier iTunes qui se trouve dans /Users/NomUtilisateur/Music (où NomUtilisateur est votre login) vers votre disque dur externe
  • Ouvrir iTunes en tenant la touche option enfoncée (comme indiqué dans cet article)
  • Choisir le dossier iTunes que vous venez de copier sur votre disque dur externe

Vérifiez que vous avez bien accès à votre bibliothèque iTunes, avec tous vos fichiers, playlists, etc. Une fois cette vérification effectuée, vous pouvez supprimer le dossier /Users/NomUtilisateur/Music/iTunes de votre disque dur interne.

Transférer les sauvegardes iOS sur le disque dur externe

Après avoir transféré mes fichiers de musique, je me retrouvais tout de même avec un disque qui se remplissait rapidement pour des raisons que je n’arrivais pas à analyser. C’est simplement que les sauvegardes iOS, contrairement aux applications, ne sont pas stockées dans le dossier iTunes Media. Elles sont présentes dans le dossier ~/Library/Application Support/MobileSync/Backup. Pour les transférer, c’est un poil plus complexe que pour la procédure précédente, dans la mesure où vous aurez besoin d’utiliser le Terminal de MacOSX. Si vous ne savez pas ce que c’est, je vous déconseille d’aller plus loin !

  • Quittez iTunes, débranchez vos appareils iOS
  • Dans le Finder, ouvrez le menu Aller et cliquez sur l’option Aller au dossier
  • Saisissez le dossier ~/Library/Application Support/MobileSync/ et cliquez sur Aller
Aller au dossier MobileSync

Aller au dossier MobileSync

  • Copier le dossier Backup vers votre disque dur externe. Pour ma part, je l’ai copié à la racine du dossier iTunes créé au chapitre précédent.
  • Renommez le dossier Backup original de votre disque dur interne en Backup.old par exemple
  • Créez un lien symbolique vers votre nouveau répertoire de sauvegarde en tapant la commande suivante dans votre Terminal:
  • ln -s /Volumes/NomDeVotreDisqueDurExterne/Emplacement/Backup ~/Library/Application\ Support/MobileSync/Backup. Attention : si le NomDeVotreDisqueDurExterne comporte des espace, vous devez les préfixer par un antislash \ comme dans le libellé de Application Support ci-dessus.
Répertoire Backup dans le terminal

Lien symbolique vers le répertoire Backup

  • Ouvrez iTunes, connectez un appareil iOS et vérifiez dans les préférences iTunes que vos sauvegardes apparaissent toujours.

Vous pouvez alors supprimer le dossier Backup.old et profiter de l’espace libéré (un dizaine de Go sur mon MacBook Air).

Utiliser les services Public Cloud d’OVH sur Mac

En plein dans la lecture de Deploying Rails, un bouquin instructif sur l’automatisation du déploiement de l’infrastructure pour sites Rails, je me suis inscrit au Cloud Public d’OVH pour mettre en pratique l’enseignement du livre. Ce dernier ayant pour sujet le scriptage des actions de mise en ligne d’une application, la présence d’APIs dans la solution d’OVH me paraissait être un argument important en faveur de ce produit.

OVH propose même un script permettant de réaliser les appels à l’API directement à partir de la ligne de commande. Sous Ubuntu, pas de problème, tout se passe bien. Mais sous Mac OSX, pas si simple, et les tentatives de téléchargement automatique des différents modules perl nécessaires se sont soldés par des échecs.

En googlant, je suis heureusement tombé sur deux articles qui m’ont tiré d’affaire. Pour installer CPAN qui va vous permettre d’installer d’autres modules, il vous faut procéder de la manière suivante :

  • Installer XCode (https://developer.apple.com/xcode/) – vous devrez vous enregistrer mais le téléchargement est gratuit pour Mountain Lion.
  • Lancer XCode et ouvrir les Preferences.
  • Cliquer sur l’onglet Downloads
  • Cliquer pour installer les Command Line Tools

En ouvrant un Terminal, tapez les commandes suivantes :

$ sudo perl -MCPAN -e shell
perl> o conf init

Vous pouvez ensuite mettre CPAN à jour en tapant la commande suivante :

sudo perl -MCPAN -e 'install Bundle::CPAN'

Avant de pouvoir lancer le script ovhcloud, il vous faut le modifier légèrement, en ajoutant la ligne suivante sous l’instruction use strict; située ligne 14 :

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;

Vous pouvez maintenant bénéficier du script ovhcloud sur Mac OSX !

via Noemi Millman, PilgrimX182

Remplacer rvm par rbenv

Il semblerait que rvm soit « so much last year » que je me devais de tester rbenv, dont la promesse est de modifier moins en profondeur le système sur lequel il est installé. Voici comment j’ai procédé sur mon Mac.

Désinstaller rvm

Tout d’abord, vous devez désinstaller rem, en tapant les commandes suivantes :

rvm implode
rm ~/.rvmrc
rm /etc/rvmrc

Attention, en tapant ces commandes, vous désinstallez également les versions de ruby que vous auriez installées au travers de rvm (sur Mac vous vous retrouverez avec un ruby 1.8.7).

Il vous faut également chercher dans les fichiers .bashrc, .profile et .bash_profile si rvm n’a pas ajouté son répertoire à votre path. Si c’est le cas, commentez la ligne en question.

Installer rbenv

Pour installer rbenv, il vous suffit de taper les commandes suivantes :

cd ~
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

Quittez et rouvrez votre terminal pour prendre en compte les modifications.

Pour installer facilement une version de ruby, installez le plugin ruby-build de la manière suivante :

mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git

Vous pouvez ensuite installer une version de ruby en tapant la commande suivante :

rbenv install 1.9.3-p194
rbenv rehash

La seconde commande est nécessaire à chaque fois que vous installez une version de ruby ou un gem avec une partie binaire.

Pour utiliser une version de ruby globalement, vous tapez simplement :

rbenv global 1.9.3-p194

Et vous utilisez la version de ruby indiquée. N’oubliez pas ensuite de réinstaller bundler :

gem install bundler

Redémarrez votre terminal, puis dans chacun de vos projets Rails de faire :

bundle install

Via rbenv et ruby-build

Pousser son dépôt git vers un serveur

Lorsque je démarre un nouveau projet, cela se passe toujours sur ma machine cliente, et je crée bien entendu le dépôt git dans la foulée. Ce n’est généralement qu’après que je mutualise ce dépôt en le stockant sur github ou sur mon serveur git personnel.

Voici la méthode que j’utilise pour créer le dépôt à postériori :

# Sur le serveur
mkdir /chemin/vers/git/projet

# Sur le client, depuis le répertoire de votre projet
scp -r .git monloginserveur@monserveur/chemin/vers/git/projet

La commande scp permet de copier des fichiers par ssh. Cette copie binaire permet de dupliquer le dépôt du client vers le serveur en utilisant le login dont vous vos servez pour vous connecter en ssh.

Une fois que vous avez copié le dépôt, vous pouvez ajouter votre serveur comme dépôt distant dans votre projet avec la commande suivante :

git remote add origin ssh://monloginserveur@monserveur/chemin/vers/git/projet

Pour pouvoir pousser vos modifications vers votre serveur, vous devez ensuite taper la commande suivante dans le répertoire git de votre serveur :

git config --bool core.bare true

A partir de Simple Central Git Repository