/[pxelator]/lib/PXElator/ssh.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /lib/PXElator/ssh.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 362 - (hide annotations)
Sun Aug 30 10:38:13 2009 UTC (14 years, 8 months ago) by dpavlin
File size: 1650 byte(s)
sort conf options in display
1 dpavlin 283 package ssh;
2    
3 dpavlin 351 use warnings;
4     use strict;
5    
6 dpavlin 283 use Net::OpenSSH;
7 dpavlin 312 use English;
8 dpavlin 348 use Data::Dump qw/dump/;
9 dpavlin 351 use client;
10     use CouchDB;
11 dpavlin 283
12 dpavlin 362 my $id = 3;
13 dpavlin 353 my $id_rsa = '/root/.ssh/id_rsa';
14 dpavlin 283
15 dpavlin 353 sub copy_id {
16     my $ip = shift;
17     my $ssh = client::ip_path( $ip, 'ssh' );
18     return if -l $ssh;
19     my $id = $id_rsa . '.pub';
20     my $cmd = "sudo ssh-copy-id -i $id root\@$ip";
21     warn "# $cmd\n";
22     system $cmd;
23     warn "$id -> $ssh";
24     symlink $id, $ssh;
25     }
26    
27 dpavlin 283 sub ethernet_bridge_to {
28 dpavlin 353 my $ip = shift;
29 dpavlin 283
30 dpavlin 312 die "you need to run this as root\n" unless $UID == 0;
31    
32 dpavlin 353 copy_id $ip;
33    
34 dpavlin 283 warn "# reset local IP address";
35     system "ifconfig virtual 172.16.10.$id";
36    
37 dpavlin 353 warn "# connect to $ip";
38     my $ssh = Net::OpenSSH->new( $ip,
39     master_opts => [ -i => $id_rsa, -w => "$id:$id", -o => 'Tunnel=ethernet' ],
40 dpavlin 283 );
41    
42     foreach my $command ( "ifconfig tap$id up", "brctl addif virtual tap$id" ) {
43     warn "# $command";
44     system $command;
45     $ssh->system( $command ) or die "$command ", $ssh->error;
46     }
47    
48 dpavlin 353 warn "press enter to close tunnel to $ip from $id";
49 dpavlin 283 <STDIN>;
50    
51 dpavlin 353 system "ifconfig virtual 172.16.10.1";
52    
53 dpavlin 283 }
54    
55 dpavlin 348 sub shell {
56 dpavlin 351 my $ip = shift;
57 dpavlin 348
58 dpavlin 353 copy_id $ip;
59 dpavlin 348
60 dpavlin 353 warn "# ssh $ip -i $id_rsa";
61     my $ssh = Net::OpenSSH->new( $ip,
62     master_opts => [ -i => $id_rsa ],
63     );
64    
65 dpavlin 348 my $html;
66 dpavlin 351 my @shell;
67 dpavlin 348
68     foreach my $command ( @_ ) {
69 dpavlin 351 warn "root\@$ip:# $command\n";
70 dpavlin 348 my ($out,$err) = $ssh->capture2( $command ) or die "$command ", $ssh->error;
71     warn "$out\n$err";
72    
73 dpavlin 351 CouchDB::audit( $ip, $command, { ip => $ip, command => $command, out => $out, err => $err } );
74    
75     $html .= qq|<tt style="color: grey">root\@$ip:# <b>$command</b></tt><pre>$out</pre>|;
76 dpavlin 348 $html .= qq|<pre style="color: red">$err</pre>| if $err;
77     }
78    
79     return $html;
80     }
81    
82 dpavlin 283 1;

  ViewVC Help
Powered by ViewVC 1.1.26