Friday, December 30, 2005

ssh-agent sous Mac OS X ; BIS

Titre :

ssh-matters with Mac OS X

Description :

Si pour vous utiliser ssh-add et ssh-agent est pénible sous Mac OS X, je propose ici une solution...

Dépendance :

keychain (installable via port de darwin : port install keychain

Procédure :
1. Ajouter dans .bashrc :

#DEBUT definition de la fonction
function sshmatter () {
   if [ "`ps auxw | grep ssh-agent | grep -v grep`" == "" ]
   then
      keychain 2> /dev/null 
   fi
   if [ "$SSH_AUTH_SOCK" == "" ] && [ "$SSH_AGENT_PID" == "" ]\
        || [ "`ls $SSH_AUTH_SOCK 2> /dev/null`" == "" ]
   then
       source ~/.keychain/*-sh
   fi
}
#FIN definition de la fonction

2. Toujours dans .bashrc (ou dans .bash_aliases, c'est selon vos préférences...)

# execution au demarrage de bash
   sshmatter
# alias pour accessibilité
   alias ssh-add-custom="sshmatter ; ssh-add"

Remarques :

C'est ma solution pour utiliser ssh-add aussi facilement que sous Linux... Il y a sûrement plus court. Il y a peut-être plus simple...

ssh-agent sous Mac OS X

Sous Mac OS X.4, j'ai rencontré quelques problèmes avec l'utilisation de l'agent ssh. ssh-agent est un programme qui vous permet de vous authentifier par rapport à une clef privée. Une fois authentifié, vous pouvez vous logguer - sans avoir besoin de rentrer à nouveau votre mot de passe - sur toutes les comptes possédant la clef publique associée (au bon endroit, bien sûr).

Pour palier au problème qui peut occurrer :
    ssh-add     Could not open a connection to your authentication agent.

voici une solution que je propose :

#!/bin/sh

#BEGIN
if [ "`ps auxw | grep ssh-agent | grep -v grep`" == "" ]
then
   keychain 2> /dev/null
fi
if [ "$SSH_AUTH_SOCK" == "" ] && [ "$SSH_AGENT_PID" == "" ]     || [ "`ls $SSH_AUTH_SOCK 2> /dev/null`" == "" ]
then
    source ~/.keychain/*-sh
fi
ssh-add
#END

Si vous mettez ce programme dans un fichier avec les droits d'exécutions, accessible via votre variable d'environnement PATH (i.e. Le programme "env" est capable de retrouver votre programme), par exemple avec le nom "ssh-add-custom", et que vous mettez un alias dans votre .bashrc (ou .bash_aliases) : alias ssh-add-custom=". $(which ssh-add-custom)" alors vous pouvez utiliser tranquillement ssh-add-custom pour vous authentifier par rapport à votre clef privée et votre agent ssh.

Le programme précédent suppose que vous utilisez un shell compatible "sh". Si vous utilisez "csh", il suffit de remplacer "*-sh" par "*-csh" dans le programme. D'autre part, le programme "keychain" est nécessaire. (installable via les ports de darwin : par exemple, via "port install keychain")

Enfin, dans votre .bashrc, vous pouvez aussi directement mettre le programme précédent, pour qu'un agent soit toujours disponible ;o) (en enlevant la dernière ligne "ssh-add")

...

pgrep sous Mac OS X

Pgrep est un programme disponible sous Gnu/Linux. Par défaut, il n'existe pas sous Mac OS X.

Voici un programme équivalent à un pgrep minimaliste :

#!/bin/sh

if [ "$1" == "-w" ] ; then
    shift
  ps auwx | grep $* | grep -v grep
else
  ps auwx | grep $* | grep -v grep | awk '{print $2}' 2> /dev/null
fi