PDK-Connector
view release on metacpan or search on metacpan
lib/PDK/Connector/Role.pm view on Meta::CPAN
required => 0,
default => '', # é»è®¤ç©ºå¯ç
);
# å¯ç çè¯å±æ§
has passphrase => (
is => 'ro',
required => 0,
default => '', # é»è®¤ç©ºå¯ç çè¯
);
# ç¹ææ¨¡å¼å¯ç 屿§
has enPassword => (
is => 'ro',
required => 0,
);
# è¿æ¥åè®®å±æ§
has proto => (
is => 'ro',
required => 0,
default => 'ssh', # é»è®¤ä½¿ç¨SSHåè®®
);
# ç»å½æåæç¤ºç¬¦
has prompt => (
is => 'ro',
required => 0,
default => '^\s*\S+[>\]]\s*$', # é»è®¤æç¤ºç¬¦
);
# ç»å½ç¹ææ¨¡å¼æç¤ºç¬¦
has enPrompt => (
is => 'ro',
required => 0,
);
# ä¼è¯è¶
æ¶æ¶é´
has timeout => (
is => 'ro',
required => 0,
default => 30, # é»è®¤30ç§
);
# è°è¯æ¨¡å¼
has debug => (
is => 'ro',
required => 0,
default => 2, # é»è®¤ä¸æå°æ¥å¿
);
# æ¥å¿è®°å½æä»¶
has log_file => (
is => 'ro',
lazy => 1,
default => sub {
my $self = shift;
# è·åç¨æ·å®¶ç®å½ï¼è·¨å¹³å°æ¹å¼ï¼
my $home = $ENV{PDK_LOG_DIR};
$home ||= $ENV{HOME} || $ENV{USERPROFILE} || (getpwuid($<))[7];
# å建 logs ç®å½ï¼å¦æä¸åå¨ï¼
my $log_dir = "$home/logs";
mkdir $log_dir unless -d $log_dir;
# æå»ºæ¥å¿æä»¶è·¯å¾ï¼ä½¿ç¨è®¾å¤IP
my $host = $self->host;
return "$log_dir/$host.log";
},
);
# ç»å½ç¶ææ å¿ï¼å
é¨ä½¿ç¨ï¼
has _login_ => (
is => 'ro',
required => 0,
default => 0, # é»è®¤æªç»å½
);
# ç¹ææ¨¡å¼ç¶ææ å¿ï¼å
é¨ä½¿ç¨ï¼
has _enable_ => (
is => 'ro',
required => 0,
default => 0, # é»è®¤æªè¿å
¥ç¹ææ¨¡å¼
);
# ç»å½è®¾å¤æ¹æ³
sub login {
my $self = shift;
# 妿已ç»å½ï¼ç´æ¥è¿åæå
return { success => $self->{_login_} } if $self->{_login_};
# å°è¯è¿æ¥è®¾å¤
eval {
$self->connect() if not defined $self->{exp};
};
# å¤çè¿æ¥è¿ç¨ä¸å¯è½åºç°çå¼å¸¸
if ($@) {
# å¤çRSAå¯é¥å¤ªå°çé®é¢
if ($@ =~ /RSA modulus too small/) {
eval {
$self->connect(' -1 '); # 使ç¨SSHv1åè®®éè¯
};
if ($@) {
return { success => 0, reason => $@ };
}
}
# å¤ç䏿¯æçå å¯ç®æ³é®é¢
elsif ($@ =~ /Selected cipher type <unknown> not supported by server/i) {
eval {
$self->connect('-c des '); # 使ç¨DESå å¯ç®æ³éè¯
};
if ($@) {
return { success => 0, reason => $@ };
}
}
# å¤çè¿æ¥è¢«æç»çæ
åµï¼å¯è½æ¯SSH端å£å
³éï¼
elsif ($@ =~ /Connection refused/i) {
eval {
$self->{proto} = 'telnet'; # 忢å°Telnetåè®®
( run in 2.509 seconds using v1.01-cache-2.11-cpan-7fcb06a456a )