我们目前在旧的Windows服务器(Windows Server 2003)上运行的作业需要移动到新的服务器,因为旧的服务器很快就会退役。此作业作为Windows计划任务运行,该任务以频繁的间隔运行,调用Perl脚本,使用供应商的公钥加密某些文件,并将加密的文件上载到供应商的外部FTP站点。
我是一名自学成才的程序员/开发人员/工程师,他不熟悉Perl,但我一直负责这项工作。
以下是我采取的步骤:
gpg --import [path to the key file]
增加对导入密钥的信任,以防止每次使用命令时受到质疑:
gpg –-edit-key [name of Prudential’s key]
trust
5
y
然后我接受了现有的脚本,对文件路径等一些常量进行了一些更改,注释掉了FTP文件的命令(因为我此时只是运行一个临时测试)并且试图运行它来加密一些示例文件。该脚本成功运行完成,但由于文件加密的命令结果而生成了友好的错误消息。
以下是加密发生的脚本部分:
sub encrypt_outgoing_files {
# open outgoing decrypted directory
&message(sprintf("CD: %s\n", $out_dec_path), 0);
if (opendir(OUT_DEC_DIR, $out_dec_path)) {
# check for new files
&message("Checking for new files\n", 0);
my $file;
my $new_flag;
my %files_hash;
foreach $file (readdir(OUT_DEC_DIR)) {
if (-f $out_dec_path . $file) {
$files_hash{$file} = (stat($out_dec_path . $file))[9];
}
}
my @files = sort { $files_hash{$a} cmp $files_hash{$b} } keys %files_hash; # sort by mtime
foreach $file (@files) {
if (-f $out_dec_path . $file) {
$new_flag = 1;
# rename and encrypt this file
my $out_file = $file;
$out_file =~ s/\.?[0-9]+$//i; # rename outbound files according to this regex
&message(sprintf("Encrypting: %s (%s)\n", $file, $out_file), 1);
if (!system(sprintf("%s -e \"print('%s')\" | %s --batch --passphrase-fd 0 --output %s --local-user %s --recipient %s --sign --encrypt --cipher-algo %s %s >NUL 2>&1", $perl_path, $pgp_passphrase, $pgp_exe_path, $out_enc_path . $out_file . $pgp_extension, $pgp_sender, $pgp_recipient, $pgp_cipher, $out_dec_path . $file))) {
# archive decrypted original
&message("Archiving decrypted version\n", 0);
rename($out_dec_path . $file, $out_dec_path . $archive_dir . $file);
}
# error encrypting this file
else {
unlink($out_enc_path . $out_file . $pgp_extension); # delete partially encrypted file (just in case)
&message("Error encrypting file (will try again next time around)\n", 1);
}
}
}
# nothing new
if (!defined($new_flag)) {
&message("None found\n", 0);
}
# close directory
closedir(OUT_DEC_DIR);
# clean archive
&message(sprintf("CD: %s\n", $out_dec_path . $archive_dir), 0);
&clean_dir($out_dec_path . $archive_dir, $max_archive_age);
}
# invalid directory
else {
&message(sprintf("Directory not found: %s\n", $out_dec_path), 2);
}
}
对于每个文件,我都会收到“错误加密文件(下次会再次尝试)”消息。
但是,如果我尝试使用命令提示符单独使用GPG加密其中一个文件,则文件已成功加密。
所以,我有三个问题:
答案 0 :(得分:-1)
我发现困难的一件事是您用来导入密钥的任何帐户,您还必须使用与密钥相关的任何其他任务。试着调查那个