<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://forum.ubuntu-fr.org/extern.php?action=feed&amp;tid=1063331&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Forum Ubuntu-fr.org / Script shell (SH / DASH) - Bug !]]></title>
		<link>http://forum.ubuntu-fr.org/viewtopic.php?id=1063331</link>
		<description><![CDATA[Les sujets les plus récents dans Script shell (SH / DASH) - Bug !.]]></description>
		<lastBuildDate>Tue, 09 Oct 2012 21:04:56 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Réponse à&#160;:  Script shell (SH / DASH) - Bug !]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=11067981#p11067981</link>
			<description><![CDATA[<p>C&#039;est bon, je m&#039;étais trompé dans le test du if : pour comparer deux chaînes, c&#039;est le signe égal (=). Le -eq n&#039;est bon que pour comparer des entiers (ça marche pour des entiers relatifs).</p>]]></description>
			<author><![CDATA[dummy@example.com (Le Barde)]]></author>
			<pubDate>Tue, 09 Oct 2012 21:04:56 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=11067981#p11067981</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  Script shell (SH / DASH) - Bug !]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=11067521#p11067521</link>
			<description><![CDATA[<p>Merci beaucoup.</p><p>J&#039;ai modifié comme suit :</p><div class="codebox"><pre><code>    print_title &quot;Configuration de la machine locale&quot;
    if [ -z $BOOL_INSTALL ]; then
    {
        BOOL=&quot;Y&quot;
    }
    else
    {
        echo -n &quot;Configuration automatique de $HOME/.ssh/config (o/N) ?&quot;
        read BOOL
    }
    fi
    
    if [ &quot;$BOOL&quot; = &quot;Y&quot; -o &quot;$BOOL&quot; -eq &quot;y&quot; -o &quot;$BOOL&quot; -eq &quot;O&quot; -o &quot;$BOOL&quot; -eq &quot;o&quot; ]; then</code></pre></div><p>On me dit maintenant :</p><div class="quotebox"><cite>sh a écrit&#160;:</cite><blockquote><div><p>./install-maintenance: 86: [: Illegal number: Y</p></div></blockquote></div><p>¡ No entiendo !</p>]]></description>
			<author><![CDATA[dummy@example.com (Le Barde)]]></author>
			<pubDate>Tue, 09 Oct 2012 20:40:40 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=11067521#p11067521</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  Script shell (SH / DASH) - Bug !]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=11066961#p11066961</link>
			<description><![CDATA[<p>Salut,</p><p>normal, la syntaxe </p><div class="codebox"><pre><code> if [ $BOOL -eq &quot;Y&quot; || $BOOL -eq &quot;y&quot; || $BOOL -eq &quot;O&quot; || $BOOL -eq &quot;o&quot; ]; then</code></pre></div><p> n&#039;existe pas.</p><p>Si tu fais du sh, il faut faire :</p><div class="codebox"><pre><code> if [ $BOOL -eq &quot;Y&quot; -o $BOOL -eq &quot;y&quot; -o $BOOL -eq &quot;O&quot; -o $BOOL -eq &quot;o&quot; ]; then</code></pre></div><p>Sinon en bash :</p><div class="codebox"><pre><code> if [[ $BOOL -eq &quot;Y&quot; || $BOOL -eq &quot;y&quot; || $BOOL -eq &quot;O&quot; || $BOOL -eq &quot;o&quot; ]]; then</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (sputnick)]]></author>
			<pubDate>Tue, 09 Oct 2012 20:04:59 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=11066961#p11066961</guid>
		</item>
		<item>
			<title><![CDATA[Script shell (SH / DASH) - Bug !]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=11066841#p11066841</link>
			<description><![CDATA[<p>Bonjour à tous,</p><p>J&#039;installe de temps en temps une machine chez des amis. Comme il faut bien que je fasse la maintenance de temps à autre et que je n&#039;ai pas toujours el temps de me déplacer, je fais un pont SSH qui me permet d&#039;avoir la main à distance (non, ça ne me sert pas pour faire des choses pâ bien).<br />Je suis en train d&#039;écrire un script shell pour automatiser tout ça : créer une clef RSA, configurer le serveur distant pour installer la clef publique dans ~/.ssh/authorized_keys, configurer localhost pour créer un pont à chaque démarrage ou sur commande...</p><p>Les premières bases fonctionnaient bien mais j&#039;ai un bug. Voici le script :</p><div class="codebox"><pre class="vscroll"><code>#!/bin/sh

# SM (SSH Maintenance) v 1.0
# Script d&#039;installation d&#039;une clef ssh
# Configuration pour créer un pont ssh (-R) automatiquement
# afin de permettre un accès root sur la machine cible.
# 
# Cela vous permettra, à l&#039;installation
# 
# Réalisé par Le Barde

VERSION=1.0

DEFAULT_HOST=serveur_distant.com
DEFAULT_USER=utilisateur_par_defaut
DEFAULT_PORT=65500



# Error codes
SSH_ERROR=10
BAD_PARAMS=11

print_title()
{
    sleep 0.5
    echo &quot;\033[1;31m* $1\033[0m&quot;
}

usage()
{
    cat &lt;&lt;_USAGE
Usage : `basename $0` [-i]
    -h   Afficher cette aide.
    -i   Installation. Modification de ~/.ssh/config en local,
          de ~/.ssh/authorized_keys sur le serveur distnat, et
          ajout du script init.
_USAGE
}

get_info()
{
    print_title &quot;Installation d&#039;un pont SSH vers un serveur distant&quot;
    
    echo -n &quot;Hôte cible ($DEFAULT_HOST) : &quot;
    read HOST
    [ -z &quot;$HOST&quot; ] &amp;&amp; HOST=$DEFAULT_HOST
    
    echo -n &quot;Utilisateur ($DEFAULT_USER) : &quot;
    read USER
    [ -z &quot;$USER&quot; ] &amp;&amp; USER=$DEFAULT_USER
    
    echo -n &quot;Commentaire (Défaut : &#039;uname -a&#039;) : &quot;
    read COMMENT
    [ -z &quot;$COMMENT&quot; ] &amp;&amp; COMMENT=`uname -a`
    
    echo -n &quot;Port à ouvrir sur l&#039;hôte distant ($DEFAULT_PORT) : &quot;
    read REMOTE_PORT
    [ -z &quot;$REMOTE_PORT&quot; ] &amp;&amp; REMOTE_PORT=$DEFAULT_PORT
}

gen_key()
{
    print_title &quot;Création de la clef SSH&quot;
    ssh-keygen -t rsa -q -C &quot;$COMMENT - port ouvert : $REMOTE_PORT&quot; -f rsa_id
    KEY=&quot;$USER_$HOST.key&quot;
    PUBKEY=&quot;$KEY.pub&quot;
    mv -v rsa_id ~/.ssh/$KEY
    mv -v rsa_id.pub ~/.ssh/$PUBKEY
}

configure_localhost()
{
    print_title &quot;Configuration de la machine locale&quot;
    if [ -z $BOOL_INSTALL ]; then
    {
        BOOL=Y
    }
    else
    {
        echo -n &quot;Configuration automatique de $HOME/.ssh/config (o/N) ?&quot;
        read BOOL
    }
    fi
    
    if [ $BOOL -eq &quot;Y&quot; || $BOOL -eq &quot;y&quot; || $BOOL -eq &quot;O&quot; || $BOOL -eq &quot;o&quot; ]; then
    {
        echo &quot;Modification du fichier ~/.ssh/config&quot;
        cat &gt;&gt; ~/.ssh/config &lt;&lt;EOF
Host $HOST
     Hostname $HOST
     Port 22
     User $USER
     IdentityFile ~/.ssh/$KEY
EOF
    }
    fi
    
    echo &quot;TODO : rajouter un script ssh -R 22:localhost:$REMOTE_HOST $USER@$HOST&quot;
}

install_remote_key()
{
    print_title &quot;Installation de la clef sur le serveur distant&quot;
    if [ -z $BOOL_INSTALL ]; then
    {
        echo -n &quot;Se connecter au serveur distant pour copier la clef (o/N) ?&quot;
        unset BOOL
        read BOOL
    }
    else
    {
        BOOL=Y
    }
    fi
    
    if [ $BOOL -eq &quot;Y&quot; || $BOOL -eq &quot;y&quot; || $BOOL -eq &quot;O&quot; || $BOOL -eq &quot;o&quot; ]; then
    {
        echo &quot;Clef publique exportée : $(cat ~/.ssh/$PUBKEY)&quot;
        echo &quot;ssh $USER@$HOST ...&quot;
        
        ssh $USER@$HOST &quot;echo $(cat ~/.ssh/$PUBKEY) &gt;&gt; ~/.ssh/authorized_keys&quot;
        
        [ $? -ne 0 ] &amp;&amp; print_title &quot;Erreur SSH. Abandon.&quot;; exit $SSH_ERROR
        echo &quot;... Installation réussie !&quot;
    }
    fi
}


connection_test()
{
    print_title &quot;Test de la connexion : Vous ne devriez pas avoir à taper de mot de passe.&quot;
    ssh $USER@$HOST &quot;test&quot;
    [ $? -ne 0 ] &amp;&amp; echo &quot;Erreur SSH. Abandon.&quot;; exit $SSH_ERROR
}




#
# main()
#

if [ $# -ge &quot;1&quot; ]; then
{
    for i in `seq 1 $#`; do
    {
        case $1 in
            -i | --install) BOOL_INSTALL=&quot;1&quot;;;
            -h | --help) usage;;
            *) echo &quot;$1 : Mauvais argument&quot;; usage; exit $BAD_PARAMS ;;
        esac
        
        shift
    }
    done
}
fi


sleep 0.5
echo &quot;\033[1;32mSSH Maintenance version $VERSION\033[0m&quot;
# Get the vars : HOST, USER and COMMENT
get_info

# Generate the RSA keys to install on localhost and remote host.
gen_key

# Configure the local machine to automatically make a bridge.
configure_localhost

# Install the RSA key on remote host
install_remote_key

# Testing the connection
connection_test

exit 0;</code></pre></div><p>C&#039;est ici notamment que ça pose problème :</p><div class="codebox"><pre><code>    print_title &quot;Installation de la clef sur le serveur distant&quot;
    if [ -z $BOOL_INSTALL ]; then
    {
        echo -n &quot;Se connecter au serveur distant pour copier la clef (o/N) ?&quot;
        unset BOOL
        read BOOL
    }
    else
    {
        BOOL=Y
    }
    fi
    
    if [ $BOOL -eq &quot;Y&quot; || $BOOL -eq &quot;y&quot; || $BOOL -eq &quot;O&quot; || $BOOL -eq &quot;o&quot; ]; then
    {
        echo &quot;Clef publique exportée : $(cat ~/.ssh/$PUBKEY)&quot;
        echo &quot;ssh $USER@$HOST ...&quot;
        
        ssh $USER@$HOST &quot;echo $(cat ~/.ssh/$PUBKEY) &gt;&gt; ~/.ssh/authorized_keys&quot;
        
        [ $? -ne 0 ] &amp;&amp; print_title &quot;Erreur SSH. Abandon.&quot;; exit $SSH_ERROR
        echo &quot;... Installation réussie !&quot;
    }
    fi</code></pre></div><p>Ça me donne les erreurs suivantes :</p><div class="quotebox"><cite>dash a écrit&#160;:</cite><blockquote><div><p>* Configuration de la machine locale<br />./install-maintenance: 86: [: missing ]<br />./install-maintenance: 86: ./install-maintenance: Y: not found<br />./install-maintenance: 86: ./install-maintenance: Y: not found<br />./install-maintenance: 86: ./install-maintenance: Y: not found</p></div></blockquote></div><p>Puis :</p><div class="quotebox"><cite>dash a écrit&#160;:</cite><blockquote><div><p>./install-maintenance: 117: [: missing ]<br />./install-maintenance: 117: ./install-maintenance: n: not found<br />./install-maintenance: 117: ./install-maintenance: n: not found<br />./install-maintenance: 117: ./install-maintenance: n: not found</p></div></blockquote></div><p>Par ailleurs (pas encore essayé), si quelqu&#039;un a des idées pour installer automatiquement un script dans /etc/init.d et le configurer avec update-rc.d, je suis preneur ! Il faut pour cela soit le faire avec sudo, soit avec su, selon la distribution GNU/Linux. Mais ceci est une autre histoire, qui sera peut-être contée une autre fois (dans Vos scripts utiles ?).</p><p>Tchô.</p>]]></description>
			<author><![CDATA[dummy@example.com (Le Barde)]]></author>
			<pubDate>Tue, 09 Oct 2012 19:56:51 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=11066841#p11066841</guid>
		</item>
	</channel>
</rss>
