Clé SSH Problème mise en place

Bonjour,

Suite à l’installation d’un système de supervision “centreon”, j’ai besoin de faire une connexion entre mes serveurs via une clé ssh, afin de ne pas mettre de mot de passe.

j’ai actuellement deux serveurs : (les ip ne sont que pour expliquer )
-Master : 1.1.1.1
-slave : 2.2.2.2

j’ai crée sur les deux serveurs le même utilisateur appelé "centreon"
le home du centreon est : /var/lib/centreon
le dossier .ssh : /var/lib/centreon/.ssh
chmod 700 sur .ssh et chmod 600 sur authorized_keys

etape 1 : je crée sur mon serveur1 (master ) avec le compte centreon un ssh-keygen
je ne remplie pas la passphrase car pas besoin dans mon cas je veux juste une connexion sans mot de passe donc sans passphrase également

etape2 : duplication de la clé sur le serveur2 (slave) :
ssh-copy-id -i ~/.ssh/id_dsa.pub centreon@2.2.2.2

[code]réponse :
Now try logging into the machine, with “ssh ‘centreon@2.2.2.2’”, and check in:

.ssh/authorized_keys

to make sure we haven’t added extra keys that you weren’t expecting.[/code]

est la sa ne fonctionne pas j’ai les erreurs suivantes :

ssh -vvv centreon@2.2.2.2 OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug2: ssh_connect: needpriv 0 debug1: Connecting to 2.2.2.2 [2.2.2.2] port 22. debug1: Connection established. debug1: identity file /var/spool/centreon/.ssh/identity type -1 debug3: Not a RSA1 key file /var/spool/centreon/.ssh/id_rsa. debug2: key_type_from_name: unknown key type '-----BEGIN' debug3: key_read: missing keytype debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug2: key_type_from_name: unknown key type '-----END' debug3: key_read: missing keytype debug1: identity file /var/spool/centreon/.ssh/id_rsa type 1 debug3: Not a RSA1 key file /var/spool/centreon/.ssh/id_dsa. debug2: key_type_from_name: unknown key type '-----BEGIN' debug3: key_read: missing keytype debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug3: key_read: missing whitespace debug2: key_type_from_name: unknown key type '-----END' debug3: key_read: missing keytype debug1: identity file /var/spool/centreon/.ssh/id_dsa type 2 debug1: loaded 3 keys debug1: Remote protocol version 2.0, remote software version OpenSSH_6.0p1 Debian-4 debug1: match: OpenSSH_6.0p1 Debian-4 pat OpenSSH* debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_4.3 debug2: fd 3 setting O_NONBLOCK debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 debug2: kex_parse_kexinit: ssh-rsa,ssh-dss debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: first_kex_follows 0 debug2: kex_parse_kexinit: reserved 0 debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256 debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: none,zlib@openssh.com debug2: kex_parse_kexinit: none,zlib@openssh.com debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: first_kex_follows 0 debug2: kex_parse_kexinit: reserved 0 debug2: mac_init: found hmac-md5 debug1: kex: server->client aes128-ctr hmac-md5 none debug2: mac_init: found hmac-md5 debug1: kex: client->server aes128-ctr hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug2: dh_gen_key: priv key bits set: 126/256 debug2: bits set: 525/1024 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug3: check_host_in_hostfile: filename /var/spool/centreon/.ssh/known_hosts debug3: check_host_in_hostfile: match line 1 debug3: check_host_in_hostfile: filename /var/spool/centreon/.ssh/known_hosts debug3: check_host_in_hostfile: match line 1 debug1: Host '2.2.2.2' is known and matches the RSA host key. debug1: Found key in /var/spool/centreon/.ssh/known_hosts:1 debug2: bits set: 502/1024 debug1: ssh_rsa_verify: signature correct debug2: kex_derive_keys debug2: set_newkeys: mode 1 debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug2: set_newkeys: mode 0 debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_SERVICE_REQUEST sent debug2: service_accept: ssh-userauth debug1: SSH2_MSG_SERVICE_ACCEPT received debug2: key: /var/spool/centreon/.ssh/identity ((nil)) debug2: key: /var/spool/centreon/.ssh/id_rsa (0x2ab355376ad0) debug2: key: /var/spool/centreon/.ssh/id_dsa (0x2ab355378350) debug1: Authentications that can continue: publickey,password debug3: start over, passed a different list publickey,password debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password debug3: authmethod_lookup publickey debug3: remaining preferred: keyboard-interactive,password debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Trying private key: /var/spool/centreon/.ssh/identity debug3: no such identity: /var/spool/centreon/.ssh/identity debug1: Offering public key: /var/spool/centreon/.ssh/id_rsa debug3: send_pubkey_test debug2: we sent a publickey packet, wait for reply debug1: Authentications that can continue: publickey,password debug1: Offering public key: /var/spool/centreon/.ssh/id_dsa debug3: send_pubkey_test debug2: we sent a publickey packet, wait for reply debug1: Authentications that can continue: publickey,password debug2: we did not send a packet, disable method debug3: authmethod_lookup password debug3: remaining preferred: ,password debug3: authmethod_is_enabled password debug1: Next authentication method: password
Mon fichier sshd_config :

[code]

Package generated configuration file

See the sshd_config(5) manpage for details

What ports, IPs and protocols we listen for

Port 22

Use these options to restrict which interfaces/protocols sshd will bind to

#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2

HostKeys for protocol version 2

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

Lifetime and size of ephemeral version 1 server key

KeyRegenerationInterval 3600
ServerKeyBits 768

Logging

SyslogFacility AUTH
LogLevel INFO

Authentication:

LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile ~/.ssh/authorized_keys
#AuthorizedKeyFile %h/.ssh/authorized_keys

Don’t read the user’s ~/.rhosts and ~/.shosts files

IgnoreRhosts yes

For this to work you will also need host keys in /etc/ssh_known_hosts

RhostsRSAAuthentication no

similar for protocol version 2

HostbasedAuthentication no

Uncomment if you don’t trust ~/.ssh/known_hosts for RhostsRSAAuthentication

#IgnoreUserKnownHosts yes

To enable empty passwords, change to yes (NOT RECOMMENDED)

PermitEmptyPasswords no

Change to yes to enable challenge-response passwords (beware issues with

some PAM modules and threads)

ChallengeResponseAuthentication no

Change to no to disable tunnelled clear text passwords

#PasswordAuthentication yes

Kerberos options

#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

GSSAPI options

#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

Allow client to pass locale environment variables

AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

Set this to ‘yes’ to enable PAM authentication, account processing,

and session processing. If this is enabled, PAM authentication will

be allowed through the ChallengeResponseAuthentication and

PasswordAuthentication. Depending on your PAM configuration,

PAM authentication via ChallengeResponseAuthentication may bypass

the setting of “PermitRootLogin without-password”.

If you just want the PAM account and session checks to run without

PAM authentication, then enable this but set PasswordAuthentication

and ChallengeResponseAuthentication to ‘no’.

UsePAM no[/code]

Merci pour votre retour

Bonne après midi
Cordialement,

Bonjour,
Je vois que tu privilégies par défaut la connexion avec les clefs ; alors dans ce cas, chez 1.1.1.1 as-tu configuré ~/.ssh/config ? Qu’as-tu mis pour te connecter chez 2.2.2.2 ?
Avec une entrée du type

Host 2.2.2.2 Hostname 2.2.2.2 Port 22 User centreon IdentityFile ~/.ssh/id_rsa
peut-être que ça fera évoluer les choses (ça c’est sur 1.1.1.1).

Ce qui est bizarre c’est que SSH n’a pas l’air de reconnaître ta clef comme une clef RSA.

Au passage je m’étais écrit un script pour faire tout ce boulot-là automatiquement, peut-être que ça t’aidera :

[code]~$ cat bin/install-maintenance
#!/bin/sh

SM (SSH Maintenance) v 1.0

Script d’installation d’une clef ssh

Configuration pour créer un pont ssh (-R) automatiquement

afin de permettre un accès root sur la machine cible.

Réalisé par Adrien Poupin (contact@adrien-poupin.fr)

VERSION=1.0

Define your own default vars

DEFAULT_HOST=dev.example.com
DEFAULT_USER=centreon
DEFAULT_PORT=65500

Error codes

SSH_ERROR=10
BAD_PARAMS=11

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

usage()
{
cat <<_USAGE
Usage : basename $0 [-i]
-h Afficher cette aide.
-t, --test-only
Teste uniquement les connexions et affiche les comman-
des à effectuer pour la mise en place d’un tunnel
SSH.
-i, --install
Installation. Modification de ~/.ssh/config en local,
de ~/.ssh/authorized_keys sur le serveur distant, et
ajout du script init.
_USAGE
}

get_info()
{
print_title “Installation d’un pont SSH vers un serveur distant”

echo -n "Hôte cible ($DEFAULT_HOST) : "
read HOST
[ -z "$HOST" ] && HOST=$DEFAULT_HOST

echo -n "Utilisateur ($DEFAULT_USER) : "
read USER
[ -z "$USER" ] && USER=$DEFAULT_USER

echo -n "Commentaire (Défaut : 'hostname') : "
read COMMENT
[ -z "$COMMENT" ] && COMMENT=`hostname`

echo -n "Port à ouvrir sur l'hôte distant ($DEFAULT_PORT) : "
read REMOTE_PORT
[ -z "$REMOTE_PORT" ] && REMOTE_PORT=$DEFAULT_PORT

}

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

configure_localhost()
{
print_title "Configuration de la machine locale"
if [ -z $BOOL_INSTALL ]; then
{
echo -n "Configuration automatique de $HOME/.ssh/config (o/N) ? "
read BOOL
}
else
{
BOOL=Y
}
fi

if [ "$BOOL" = "Y" -o "$BOOL" = "y" -o "$BOOL" = "O" -o "$BOOL" = "o" ]; then
{
    echo "Modification du fichier ~/.ssh/config"
    cat >> ~/.ssh/config <<EOF

Host $HOST
Hostname $HOST
Port 22
User $USER
IdentityFile ~/.ssh/$KEY
EOF
}
fi

echo "TODO : rajouter un script ssh -R $REMOTE_PORT:localhost:$HOST $USER@$HOST"

}

install_remote_key()
{
print_title "Installation de la clef sur le serveur distant"
if [ -z $BOOL_INSTALL ]; then
{
echo -n "Se connecter au serveur distant pour copier la clef (o/N) ? "
unset BOOL
read BOOL
}
else
{
BOOL=Y
}
fi

if [ "$BOOL" = "Y" -o "$BOOL" = "y" -o "$BOOL" = "O" -o "$BOOL" = "o" ]; then
{
    echo "Clef publique exportée : $(cat ~/.ssh/$PUBKEY)"
    echo "ssh $USER@$HOST ..."
    
    ssh $USER@$HOST "echo \"$(cat ~/.ssh/$PUBKEY)\" >> ~/.ssh/authorized_keys"
    
    [ $? -ne 0 ] && print_title "Erreur SSH. Abandon." && exit $SSH_ERROR
    echo "... Installation réussie !"
}
fi

}

connection_test()
{
print_title "Test de la connexion : Vous ne devriez pas avoir à taper de mot de passe."
ssh $USER@$HOST “test 1”

[ $? -ne 0 ] && echo "Erreur SSH. Abandon." && exit $SSH_ERROR
echo "Test OK !"

}

test_only()
{
print_title "Simulation."
cat <<SIMULATION
Pour mettre en place le tunnel SSH vers le serveur distant :

  1. Créer des clefs SSH avec
    ~$ ssh-keygen -t rsa -q -C “$COMMENT - port ouvert : $REMOTE_PORT” -f rsa_id
  2. Déplacer les clefs (et les renommer sous un nom parlant, ex. ~/.ssh/$HOST_$USER) vers le répertoire ~/.ssh/
  3. Ajouter la configuration sur localhost (~/.ssh/config) :
    Host $HOST
    Hostname $HOST
    Port 22
    User $USER
    IdentityFile ~/.ssh/MA_CLEF_PRIVÉE
  4. Ajouter la clef publique (~/.ssh/MA_CLEF_PRIVÉE.pub) sur l’hôte distant dans ~/.ssh/authorized_keys
  5. Tester que le pont fonctionne bien :
    ~$ ssh -R $REMOTE_PORT:localhost:22 $USER@$HOST
  6. Ajouter un script de démarrage ou un cron (nécessite autossh) :
    ~$ screen -dmS autossh autossh -R $REMOTE_PORT:localhost:22 $USER@$HOST
    SIMULATION
    exit 0;
    }

main()

if [ $# -ge “1” ]; then
{
for i in seq 1 $#; do
{
case $1 in
-i | --install) BOOL_INSTALL=“1”;;
-t | --test-only) DO_NOTHING=“1”;;
-h | --help) usage;;
*) echo “$1 : Mauvais argument”; usage; exit $BAD_PARAMS ;;
esac

    shift
}
done

}
fi

sleep 0.5
echo “\033[1;32mSSH Maintenance version $VERSION\033[0m”

Test-only case : tells the user.

[ ! -z $DO_NOTHING ] && echo “Test-only : Mode de simulation seule.”

Get the vars : HOST, USER and COMMENT

get_info

Test only

[ ! -z $DO_NOTHING ] && test_only

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]
C’était un script que j’avais écrit pour les installations que je faisais chez les amis / voisins, pour pouvoir les dépanner plus simplement (avec leur accord).
Attention, pour bien faire il faudrait, sur la machine hôte, mettre un autossh dans un screen qui se lance au démarrage de la machine.

Salut,

Première erreur.

Il te faut décommenter cette ligne en sshd_config :

Et lui indiquer le bon chemin.

Deuxième erreur.

La clé ne se situe pas au bon endroit !!

Redémarres les services de part et d’autre.

@BelZéButh : Attention, y’a pas de raison que tout le serveur soit centré sur l’utilisateur centreon, qu’est-ce qui se passe si norbert essaie de se connecter en ssh ?

[quote=“protec”]j’ai crée sur les deux serveurs le même utilisateur appelé “centreon”

le home du centreon est : /var/lib/centreon

le dossier .ssh : /var/lib/centreon/.ssh

chmod 700 sur .ssh et chmod 600 sur authorized_keys

etape 1 : je crée sur mon serveur1 (master ) avec le compte centreon un ssh-keygen

etape2 : duplication de la clé sur le serveur2 (slave) :

ssh-copy-id -i ~/.ssh/id_dsa.pub centreon@2.2.2.2
[/quote]

Où est le souci ? Si tenté …

* edit *

Norbert, Pierre, Paul, Jacques, n’étant pas les dépositaires de la dite clé => Connexion Refusé !

Tout à fait, mais oncques n’a pas besoin de spécifier où se trouve authorized_keys : si quelqu’un cherche à se connecter en tant que centreon sur la machine 2.2.2.2 par clef rsa, ça va chercher directement dans le fichier ~/.ssh/authorized_keys par défaut. Mais si ensuite c’est norbert qui veut se connecter, là ça pourrit tout si /var/lib/centreon/.ssh/authorized-keys n’est pas accessible par norbert (c’est ce que tu dis quand tu spécifies /var/lib/centreon/.ssh/authorized_keys directement dans le fichier /etc/ssh/sshd_config, qui est le fichier de conf’ général de SSH).

En tous cas, je dirais à vue de nez que le problème doit se trouver dans /var/lib/centreon/.ssh/config, ou que la clef SSH a été mal générée (moins probable). Ce n’est pas un problème de configuration générale de SSH, mais un problème spécifique à l’utilisateur centreon apparemment.

debug1: identity file /var/spool/centreon/.ssh/id_rsa type 1 debug3: Not a RSA1 key file /var/spool/centreon/.ssh/id_dsa. debug2: key_type_from_name: unknown key type '-----BEGIN' debug3: key_read: missing keytype

Par ailleurs une recherche sur “debug3: Not a RSA1 key file” sur google me donne ceci : linuxquestions.org/questions … ue-659069/ (ils disent que ça a résolu le pb en mettant les bonnes infos dans le fichier ~/.ssh/config).

Quelques extraits.

[quote=“man ssh”]The file ~/.ssh/authorized_keys lists the public keys that are permitted for logging in. When the user logs in, the ssh program tells the server which key pair it would
like to use for authentication. The client proves that it has access to the private key and the server checks that the corresponding public key is authorized to accept
the account.

~/.ssh/
This directory is the default location for all user-specific configuration and authentication information. There is no general requirement to keep the entire
contents of this directory secret, but the recommended permissions are read/write/execute for the user, and not accessible by others.

 ~/.ssh/authorized_keys
         Lists the public keys (DSA/ECDSA/RSA) that can be used for logging in as this user.  The format of this file is described in the sshd(8) manual page.  This file
         is not highly sensitive, but the recommended permissions are read/write for the user, and not accessible by others.[/quote]

[quote=“man sshd”]AUTHORIZED_KEYS FILE FORMAT
AuthorizedKeysFile specifies the files containing public keys for public key authentication; if none is specified, the default is ~/.ssh/authorized_keys and
~/.ssh/authorized_keys2. Each line of the file contains one key (empty lines and lines starting with a ‘#’ are ignored as comments).
[/quote]

[quote]AuthorizedKeysFile .ssh/authorized_keys

Indique le chemin vers le fichier cntenant les clés autorisée pour l’authentification par clé publique.

Le chemin peut être absolu (de type /mon/chemin/fichier) ou relatif au home de l’utilisateur (c’est le cas si l’on met .ssh/authorized_keys qui est équivalent à /home/user1/.ssh/authorized_keys où user1 est un utilisateur).[/quote]

Bonsoir,

Merci à vous deux d’une part pour le script qui fonctionne très bien (testé sur une VM )
ensuite mon erreur, j’avais deja décommenté la ligne pour la vérification du fichier, cependant il ne pointé pas au bon endroit maintenant c’est 100% ok.

j’ai perdu pas mal de temps avec la CLé ssh mais sa fonctionne parfaitement un grand merci à tous