Echange key
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Domaine | Automatisation SSH (échange de clés) |
| Langage | Perl (module Expect)
|
| Voir aussi | Echange key script · Creer une clef ssh |
Script Perl (via le module Expect) qui génère au besoin un couple de clés RSA
locales, puis copie la clé publique sur une machine distante et l'ajoute à son fichier
authorized_keys.
#!/usr/bin/perl
use Expect;
# USAGE : ssh-key-exchange.pl <IP> <USERNAME> <PASSWORD>
my $ip = $ARGV[0];
my $login = $ARGV[1];
my $password = $ARGV[2];
my $private_key = '/root/.ssh/id_rsa';
my $public_key = '/root/.ssh/id_rsa.pub';
my $authorisedkeyfile = '/root/.ssh/authorized_keys';
my $timeout = 10;
my $aft = new Expect;
# Générer le couple de clés sur la machine locale A
if (!((-e $public_key) && (-e $private_key))) {
print "Génération des clés publique et privée :\n";
@result = `ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ""`;
}
# Copier la clé publique de A vers B
print "Copie de la clé publique de A vers B.\n";
$aft->spawn("scp $public_key $login\@$ip:/tmp/");
$aft->expect($timeout,
[ qr'\? $', sub { my $fh = shift; $fh->send("yes\n"); exp_continue; } ],
[ 'Password: $', sub { my $fh = shift; $fh->send("$password\n"); exp_continue; } ],
);
$aft->do_soft_close();
# Ajouter la clé aux authorized_keys de B
print "Ajout de la clé dans authorized_keys sur $ip [$login].\n";
$aft = new Expect;
$aft->log_file("/tmp/expect_log", "w");
$aft->spawn("ssh $login\@$ip") or die "Impossible de se connecter en ssh\n";
$aft->expect($timeout,
[ qr'\? $', sub { my $fh = shift; $fh->send("yes\n"); exp_continue; } ],
[ 'Password: $', sub { my $fh = shift; $fh->send("$password\n"); exp_continue; } ],
'-re', '\# $',
);
$aft->send("touch $authorisedkeyfile\n");
$aft->expect($timeout, '-re', '\# $');
$aft->send("cat /tmp/id_rsa.pub >> $authorisedkeyfile\n");
$aft->expect($timeout, '-re', '\# $');
$aft->send("exit\n");
$aft->do_soft_close();
Voir aussi
- Echange key script — équivalent en Bash
- Creer une clef ssh — génération manuelle des clés
- SSH notions — principes de SSH