# ls ssh-targets: ssh.pl box1 -> ssh.pl box2 -> ssh.plso now typing box1 will ssh me to that machine (i then also obv get tab completion on machine names)
#!/usr/bin/perl
my $file=$0;
# what machine are we looking at?
$file=~s#^(?:.*/)?([^/]+)$#$1#;
my $dest;
# a config hash for expanding the name, and choosing the user.
my $places={
box=>{full=>"boxwithlongname"},
home=>{full=>"blahblah",user=>"alexk"}
};
# if i have many machines with the same long name - abbreviate to box
# (as in hash above), so box1 goes to boxwithlongname1 etc
my ($short,$number)=$file=~/^(\D+)(\d?)$/;
my $hash=$places->{$short};
$dest=$hash->{full}?$hash->{full}.$number:$file;
$user=$hash->{user}||"alex";
# and ssh to it.
exec("ssh $user\@$dest @ARGV") if $dest;
IMO a better way to do this (because it will continue to work with scp/sftp, does not require starting up a perl process and you can add other options with little effort) is to use the ~/.ssh/config file. For example, put this into the file:
box1:
User alexk
Hostname boxwithlongname
and on the commandline:
ssh box1
and it will do exactly the same thing. You can also add options such as compression, private key to use, X11 forwarding etc. in the same file, see man ssh_config for the details.
I did something similar to this, but with a shell script. I created a directory 'ssh' in my home dir, with a script ssh.sh, which I symlink to the short names of the servers I wish to attach to. I didn't care about shortname->longname expansion because tab completion was fast enough (for boxes that didn't end in one of the local domains anyhow).
#!/bin/bash if [ "$1" == "" ]; then ssh $1@$0 else ssh $0 fi
So, when I want to connect to myhost.org with the username 'radmat', I can just:
$ ~/ssh/myhost.org radmat
When I can't remember usernames, I make an entry in ~/.ssh/config to remember it for me. Hostnames are expanded by tab completion, and this saves me a ton of time.
Perl equivalent, if you want:
#!/usr/bin/perl
if (!defined $ARGV[0] || $ARGV[0] eq '') {
exec('ssh',$0)
}
else {
exec('ssh',"$ARGV[0]\@$0")
}
perlmonks.org content © perlmonks.org and radiantmatrix, teamster_jr, tirwhan
prlmnks.org © 2006 edmund von der burg (eccles & toad)
v 0.03