Perl Net :: SSH2 pubkey身份验证问题
发布时间:2020-12-15 23:32:18 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用Net :: SSH2连接到远程SSH服务器.命令行ssh工作正常.但我似乎无法弄清楚正确的auth_hostbased参数 这是我的代码: use Net::SSH2;my $ssh = Net::SSH2-new();$ssh-debug(1);$ssh-trace(-1);$ssh-connect('remotehost.remotedomain.tld') or di
我正在尝试使用Net :: SSH2连接到远程SSH服务器.命令行ssh工作正常.但我似乎无法弄清楚正确的auth_hostbased参数
这是我的代码: use Net::SSH2; my $ssh = Net::SSH2->new(); $ssh->debug(1); $ssh->trace(-1); $ssh->connect('remotehost.remotedomain.tld') or die; $ssh->auth_hostbased('username','ssh-rsa AAAAB3Nz[..]C0JoaFF9 root@myhost','-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,FA97214E87562096A7E480C82DAE5EB4 XIMKnj9k[..]kpRo5V -----END RSA PRIVATE KEY-----','myhost.mydomain.tld','username','keypassword') or die; 该片段仅使用’Net :: SSH2 :: DESTROY对象0xe17de0’消息@ $ssh-> auth_hostbased.设置跟踪似乎并不重要.用$ssh-> die_with_error替换die会抛出’die_with_error不是有效的Net :: SSH2宏’.下载当前0.53版本的Net:SSH2不起作用,因为脚本不再编译:’Net :: SSH2对象版本0.44与bootstrap参数0.53不匹配’ 任何有关正确参数格式或替代模块的帮助都表示赞赏. 解决方法
为什么不使用Net :: OpenSSH?
这是一个简单的ssh包装器脚本,我前段时间写道: #!/usr/bin/perl #Simple SSH Remote Executor using Net::OpenSSH Library use warnings; use strict; use Net::OpenSSH; # see http://search.cpan.org/~salva/Net-OpenSSH-0.62/lib/Net/OpenSSH.pm#DEBUGGING $Net::OpenSSH::debug = undef; use Getopt::Long; my $timeout = 10; my ($username,$identity,$hostname,$command) = undef; my $uid=getpwuid($<); my $ctl_dir=qq{/tmp/.libnet-puppet-$uid}; my $ctl_mode=0700; if ( ! -d $ctl_dir ) { mkdir( $ctl_dir,$ctl_mode ) }; open my $stderr_fh,'>>','/dev/null' or die $!; sub print_help{ print qq{nusage: $0 [options] -h Hostname -u username -i identity -c command long options are supported ! }; exit (1); } GetOptions ("hostname=s" => $hostname,# string "username=s" => $username,# string "identity=s" => $identity,# string "command=s" => $command) # string or print_help; if ( not defined $username or not defined $identity or not defined $hostname or not defined $command ) { print_help }; my $port = q{22}; my $user = $username; my $ssh; my $cmd = qq{$command}; my $options = { host => $hostname,user => $user,port => $port,default_stderr_fh => $stderr_fh,ctl_dir => $ctl_dir,master_opts => [ -o => "UserKnownHostsFile=/dev/null",-o => "StrictHostKeyChecking=no",-o => qq{IdentityFile=$identity},],timeout => $timeout }; #ALARM Timer timeout handling $SIG{ALRM} = sub { printf( "%sn",qq{invalid-timeout-connecting-to-node-$hostname}); exit(1); }; #init alarm timer ;-) alarm( $timeout ); $ssh = Net::OpenSSH->new( %{$options} ) or $ssh->error and die "Couldn't establish SSH connection: ". $ssh->error; my (@out,$err) = $ssh->capture2({ timeout => 10 },$cmd); die("Error: %sn",$err) if defined $err; if ( (scalar(@out)) eq 0 ) { printf( "%sn",qq{invalid-empty-string-received-by-node-$hostname}); exit(1); } foreach my $line ( @out ) { $line =~ s/^s{1,}//; printf ("%s",$line); } 使用cpanm(cpanm Net :: OpenSSH)或debian软件包“libnet-openssh-perl”安装它.有关可用的主选项,请参阅“man ssh_config”.我认为这个剧本会有很大的帮助.RGDS.弗朗茨 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |