[pve-devel] r6439 - in pve-cluster/trunk/data: . PVE

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Aug 10 07:22:26 CEST 2011


Author: dietmar
Date: 2011-08-10 07:22:26 +0200 (Wed, 10 Aug 2011)
New Revision: 6439

Modified:
   pve-cluster/trunk/data/ChangeLog
   pve-cluster/trunk/data/PVE/Cluster.pm
   pve-cluster/trunk/data/PVE/pvecert
Log:
	* PVE/pvecert: also update ssh related files.

	* PVE/Cluster.pm (ssh_merge_known_hosts): replace entries with
	wrong key. new parameter createLink.



Modified: pve-cluster/trunk/data/ChangeLog
===================================================================
--- pve-cluster/trunk/data/ChangeLog	2011-08-09 12:32:46 UTC (rev 6438)
+++ pve-cluster/trunk/data/ChangeLog	2011-08-10 05:22:26 UTC (rev 6439)
@@ -1,3 +1,10 @@
+2011-08-10  Proxmox Support Team  <support at proxmox.com>
+
+	* PVE/pvecert: also update ssh related files.
+
+	* PVE/Cluster.pm (ssh_merge_known_hosts): replace entries with
+	wrong key. new parameter createLink.
+
 2011-08-09  Proxmox Support Team  <support at proxmox.com>
 
 	* PVE/Cluster.pm (ssh_merge_known_hosts): also manage known_hosts

Modified: pve-cluster/trunk/data/PVE/Cluster.pm
===================================================================
--- pve-cluster/trunk/data/PVE/Cluster.pm	2011-08-09 12:32:46 UTC (rev 6438)
+++ pve-cluster/trunk/data/PVE/Cluster.pm	2011-08-10 05:22:26 UTC (rev 6439)
@@ -926,14 +926,16 @@
     # remove duplicate keys in $sshauthkeys
     # ssh-copy-id simply add keys, so the file can grow to large
 
-    # always add ourself
-    my $pub = PVE::Tools::file_get_contents($ssh_rsa_id);
-    chomp($pub);
 
     my $data = PVE::Tools::file_get_contents($sshauthkeys, 128*1024);
     chomp($data);
 
-    $data .= "\n$pub\n";
+    # always add ourself
+    if (-f $ssh_rsa_id) {
+	my $pub = PVE::Tools::file_get_contents($ssh_rsa_id);
+	chomp($pub);
+	$data .= "\n$pub\n";
+    }
 
     my $newdata = "";
     my $vhash = {};
@@ -993,7 +995,7 @@
 }
 
 sub ssh_merge_known_hosts {
-    my ($nodename, $ip_address) = @_;
+    my ($nodename, $ip_address, $createLink) = @_;
 
     die "no node name specified" if !$nodename;
     die "no ip address specified" if !$ip_address;
@@ -1014,6 +1016,10 @@
 	$new = PVE::Tools::file_get_contents($sshglobalknownhosts, 128*1024);
     }
 
+    my $hostkey = PVE::Tools::file_get_contents($ssh_host_rsa_id);
+    die "can't parse $ssh_rsa_id" if $hostkey !~ m/^(ssh-rsa\s\S+)(\s.*)?$/;
+    $hostkey = $1;
+
     my $data = '';
     my $vhash = {};
 
@@ -1023,23 +1029,36 @@
     my $merge_line = sub {
 	my ($line, $all) = @_;
 
-	if ($line =~ m/^(\S+)\sssh-rsa\s.*$/) {
+	if ($line =~ m/^(\S+)\s(ssh-rsa\s\S+)(\s.*)?$/) {
 	    my $key = $1;
+	    my $rsakey = $2;
 	    if (!$vhash->{$key}) {
 		$vhash->{$key} = 1;
-		$data .= $line;
 		if ($key =~ m/\|1\|([^\|\s]+)\|([^\|\s]+)$/) {
 		    my $salt = decode_base64($1);
 		    my $digest = $2;
 		    my $hmac = Digest::HMAC_SHA1->new($salt);
 		    $hmac->add($nodename);
 		    my $hd = $hmac->b64digest . '=';
-		    $found_nodename = 1 if $digest eq $hd;
+		    if ($digest eq $hd) {
+			if ($rsakey eq $hostkey) {
+			    $found_nodename = 1;
+			    $data .= $line;
+			}
+			return;
+		    }
 		    $hmac = Digest::HMAC_SHA1->new($salt);
 		    $hmac->add($ip_address);
 		    $hd = $hmac->b64digest . '=';
-		    $found_local_ip = 1 if $digest eq $hd;
+		    if ($digest eq $hd) {
+			if ($rsakey eq $hostkey) {
+			    $found_local_ip = 1;
+			    $data .= $line;
+			}
+			return;
+		    }
 		}
+		$data .= $line;
 	    }
 	} elsif ($all) {
 	    $data .= $line;
@@ -1062,26 +1081,25 @@
 
     my $addIndex = $$;
     my $add_known_hosts_entry  = sub {
-	my ($name, $pub) = @_;
+	my ($name, $hostkey) = @_;
 	$addIndex++;
 	my $hmac = Digest::HMAC_SHA1->new("$addIndex" . time());
 	my $b64salt = $hmac->b64digest . '=';
 	$hmac = Digest::HMAC_SHA1->new(decode_base64($b64salt));
 	$hmac->add($name);
 	my $digest = $hmac->b64digest . '=';
-	$data .= "|1|$b64salt|$digest $pub\n";
+	$data .= "|1|$b64salt|$digest $hostkey\n";
     };
 
     if (!$found_nodename || !$found_local_ip) {
-	my $pub = PVE::Tools::file_get_contents($ssh_host_rsa_id);
-	die "can't parse $ssh_rsa_id" if $pub !~ m/^(ssh-rsa\s\S+)(\s.*)$/;
-	$pub = $1;
-	&$add_known_hosts_entry($nodename, $pub) if !$found_nodename;
-	&$add_known_hosts_entry($ip_address, $pub) if !$found_local_ip;
+	&$add_known_hosts_entry($nodename, $hostkey) if !$found_nodename;
+	&$add_known_hosts_entry($ip_address, $hostkey) if !$found_local_ip;
     }
 
     PVE::Tools::file_set_contents($sshknownhosts, $data);
 
+    return if !$createLink;
+
     unlink $sshglobalknownhosts;
     symlink $sshknownhosts, $sshglobalknownhosts;
  

Modified: pve-cluster/trunk/data/PVE/pvecert
===================================================================
--- pve-cluster/trunk/data/PVE/pvecert	2011-08-09 12:32:46 UTC (rev 6438)
+++ pve-cluster/trunk/data/PVE/pvecert	2011-08-10 05:22:26 UTC (rev 6439)
@@ -22,5 +22,5 @@
 my $nodename = PVE::INotify::nodename();
 my $ip = PVE::Cluster::remote_node_ip($nodename);
 PVE::Cluster::gen_pve_node_files($nodename, $ip, $opt_force);
-
+PVE::Cluster::ssh_merge_known_hosts($nodename, $ip);
 exit (0);



More information about the pve-devel mailing list