在下面的代码中,我试图ssh到另一台机器并检查文件是否存在。
如果该文件存在,那么我需要检查访问该文件的人是否是该文件的创建者,即他的用户名是否在日志文件中。
如果存在,那么我需要删除该文件。如何通过单次登录实现此目的,即用户只能输入一次密码
$user = $ENV{USER};
$il_check_cmd = "cat $shared_il_path/$il_name/info/.info_cat.log";
my $ssh_delete = Net::SSH::Perl->new($hostname, protocol => '1,2', debug => 0, interactive => 1) ;
$ssh_delete->login($username, $password);
($stdout,$stderr,$exit) = $ssh_delete->cmd("$il_check_cmd");
if((defined $stderr) && ($stderr =~ /No such file or directory/))
{
print "-E- $RUNCMD: \"$il_name\" you have entered does not exist in \"$shared_il_path\"!! !\n";
print "-E- $RUNCMD: or\n";
print "-E- $RUNCMD: \"$il_name\" does not contain \".info_cat.log\" file!!!\n";
print "-E- $RUNCMD: Exiting...\n";
exit;
}
@content = split(/ /,$stdout);
chomp($user_e = shift(@content));
if($user_e =~ /\b$user\b/)
{
print "This is the user who created the file";
//then remove the $shared_il_path/$il_name/info/.info_cat.log
}
答案 0 :(得分:2)
请考虑使用Net::SSH::Expect
。链接页面包含SSH会话的示例代码。
答案 1 :(得分:1)
有什么问题?只需通过$ssh_delete
对象继续向远程端发送命令。
顺便说一下,如今,有更好的SSH模块Net::OpenSSH或Net::SSH2。
答案 2 :(得分:1)
my ($stdout, $stderr, $exit) = $ssh->cmd(q{perl -e'
my ($file_name) = @ARGV;
...
Perl code that does what you want to do
...
if (...some error...) {
die("...error message...\n");
}
' filename});
if ($exit) {
# An error occurred.
die("Error: $stderr");
}
只需使用«'\''
»,您通常会使用«'
»。