Hopefully someone else will find this as interesting as I did.#!/usr/bin/env perl use strict; use warnings; use Net::SSH::Perl; my ($username, $hostname, $password) = @ARGV; my $die = 0; if(!defined $username) { print "It seems you forgot to provide a username.\n"; $die = 1; } if(!defined $hostname) { print "It seems you forgot to provide a hostname.\n"; $die= 1; } if(!defined $password) { print "It seems that you forgot to provide a password.\n"; $die = 1; } if($die) { print "Usage: key <username> <hostname> <password>\n"; exit; } my $filename; if(-f $ENV{"HOME"}."/.ssh/id_rsa.pub") { $filename = "id_rsa.pub"; } elsif(-f $ENV{"HOME"}."/.ssh/id_dsa.pub") { $filename = "id_dsa.pub"; } else { print "I couldn't find an SSH public key generated. Try running + ssh-keygen then run me again."; exit } my $key = &slurp($ENV{"HOME"}."/.ssh/$filename"); my $ssh = Net::SSH::Perl->new($hostname); $ssh->login($username,$password); $ssh->cmd("mkdir ~/.ssh"); my ($out,$err,$exit) = $ssh->cmd("cat ~/.ssh/authorized_keys"); my $suc; $suc = has_key($key,$out); if($suc) { print "$username\@$hostname is already keyed with your key.\n" +; exit; } $ssh->cmd("cat >> ~/.ssh/authorized_keys",$key); ($out,$err,$exit) = $ssh->cmd("cat ~/.ssh/authorized_keys"); if(has_key($key,$out)) { print "Your public key has been successfully added; try runnin +g ssh $username\@$hostname to see if it works.\n"; } else { print "Your key could not be added.\n"; print "Try connecting manually, then adding the contents of ". +$ENV{"HOME"}."/.ssh/$filename manually to /home/$username/.ssh/author +ized_keys\n"; exit; } print "\n"; sub slurp { my $fname = shift; open my $FILE, '<', $fname; local $/; my $key = <$FILE>; close $FILE; return $key; } sub has_key { my ($key, $keys) = @_; chomp($key); my $suc = 0; my @keys = split /\n/,$keys; my $i = 1; foreach my $k (@keys) { chomp($k); if($key eq $k) { $suc = 1; last; } else { $suc = 0; } $i++; } return $suc; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: SSH Keyer for passwordless logins.
by salva (Canon) on May 26, 2011 at 19:44 UTC | |
by Sir mXe (Acolyte) on May 26, 2011 at 21:07 UTC | |
|
Re: SSH Keyer for passwordless logins.
by jwkrahn (Abbot) on May 26, 2011 at 19:01 UTC | |
by Sir mXe (Acolyte) on May 26, 2011 at 19:09 UTC |