--- lib/PXElator/ssh.pm 2009/08/29 21:10:21 351 +++ lib/PXElator/ssh.pm 2009/08/29 22:10:37 353 @@ -10,18 +10,33 @@ use CouchDB; my $id = 2; +my $id_rsa = '/root/.ssh/id_rsa'; + +sub copy_id { + my $ip = shift; + my $ssh = client::ip_path( $ip, 'ssh' ); + return if -l $ssh; + my $id = $id_rsa . '.pub'; + my $cmd = "sudo ssh-copy-id -i $id root\@$ip"; + warn "# $cmd\n"; + system $cmd; + warn "$id -> $ssh"; + symlink $id, $ssh; +} sub ethernet_bridge_to { - my $host = shift; + my $ip = shift; die "you need to run this as root\n" unless $UID == 0; + copy_id $ip; + warn "# reset local IP address"; system "ifconfig virtual 172.16.10.$id"; - warn "# connect to $host"; - my $ssh = Net::OpenSSH->new( $host, - master_opts => [ -w => "$id:$id", -o => 'Tunnel=ethernet' ], + warn "# connect to $ip"; + my $ssh = Net::OpenSSH->new( $ip, + master_opts => [ -i => $id_rsa, -w => "$id:$id", -o => 'Tunnel=ethernet' ], ); foreach my $command ( "ifconfig tap$id up", "brctl addif virtual tap$id" ) { @@ -30,15 +45,22 @@ $ssh->system( $command ) or die "$command ", $ssh->error; } - warn "press enter to close tunnel to $host from $id"; + warn "press enter to close tunnel to $ip from $id"; ; + system "ifconfig virtual 172.16.10.1"; + } sub shell { my $ip = shift; - my $ssh = Net::OpenSSH->new( $ip ); + copy_id $ip; + + warn "# ssh $ip -i $id_rsa"; + my $ssh = Net::OpenSSH->new( $ip, + master_opts => [ -i => $id_rsa ], + ); my $html; my @shell; @@ -57,16 +79,4 @@ return $html; } -my $id_pub = '/root/.ssh/id_rsa.pub'; - -sub copy_id { - my $ip = shift; - my $ssh = client::ip_path( $ip, 'ssh' ); - return if -l $ssh; - my $cmd = "sudo ssh-copy-id -i $id_pub root\@$ip"; - warn "# $cmd\n"; - system $cmd; - symlink $id_pub, $ssh; -} - 1;