mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
59 lines
1.8 KiB
Perl
Executable File
59 lines
1.8 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
#############################################################
|
|
# This script connects to the system vm socket and writes the
|
|
# authorized_keys and cmdline data to it. The system VM then
|
|
# reads it from /dev/vport0p1 in cloud_early_config
|
|
#############################################################
|
|
|
|
use strict;
|
|
use Getopt::Std;
|
|
use IO::Socket;
|
|
$|=1;
|
|
|
|
my $opts = {};
|
|
getopt('pn',$opts);
|
|
my $name = $opts->{n};
|
|
my $cmdline = $opts->{p};
|
|
my $sockfile = "/var/lib/libvirt/qemu/$name.agent";
|
|
my $pubkeyfile = "/root/.ssh/id_rsa.pub.cloud";
|
|
|
|
if (! -S $sockfile) {
|
|
print "ERROR: $sockfile socket not found\n";
|
|
exit 1;
|
|
}
|
|
|
|
if (! -f $pubkeyfile) {
|
|
print "ERROR: ssh public key not found on host at $pubkeyfile\n";
|
|
exit 1;
|
|
}
|
|
|
|
open(FILE,$pubkeyfile) or die "ERROR: unable to open $pubkeyfile - $^E";
|
|
my $key = <FILE>;
|
|
close FILE;
|
|
|
|
$cmdline =~ s/%/ /g;
|
|
my $msg = "pubkey:" . $key . "\ncmdline:" . $cmdline;
|
|
|
|
my $socket = IO::Socket::UNIX->new(Peer=>$sockfile,Type=>SOCK_STREAM)
|
|
or die "ERROR: unable to connect to $sockfile - $^E\n";
|
|
print $socket "$msg\n";
|
|
close $socket;
|
|
|