【问题标题】:Cannot run scp.exe command from perl script under windows 10 64bit在 windows 10 64bit 下无法从 perl 脚本运行 scp.exe 命令
【发布时间】:2020-08-30 16:48:12
【问题描述】:

我正在尝试使用以下命令从远程服务器下载文件

scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\temp\fileNEW.txt"

如果我打开命令提示符并运行该命令,文件就会被下载。但是,我需要将命令放在 perl 脚本中。如果我将以下命令放在 perl 脚本中

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\temp\fileNEW.txt"';
system(qq($Var1));

运行 perl 命令的本地计算机上存在文件夹 c:\temp 的位置。

然后我得到以下错误

CreateProcessW failed error:2
posix_spawn: No such file or directory

将 $Var1 更改为

my $Var1='scp';

运行脚本会产生

usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
       [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

由此我推断出在我对 $Var1 的初始定义中存在某种语法错误

如果我对 $Var1 使用以下任何值

my $Var1='scp -i "c:\users\userX\keyfile.ppk"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt"';

我得到相同的输出

usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
       [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

但是,如果我尝试以下任何一种方法:

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\temp\fileNEW.txt"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\\temp\\fileNEW.txt"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:/temp/fileNEW.txt"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\fileNEW.txt"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\\fileNEW.txt"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:/fileNEW.txt"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\temp"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:\\temp"';

my $Var1='scp -i "c:\users\userX\keyfile.ppk" user1@server.org:"/home/user1/file1.txt" "c:/temp"';

我得到了错误

CreateProcessW failed error:2
posix_spawn: No such file or directory

那么,问题是输出文件夹还是其他问题?

【问题讨论】:

    标签: windows perl


    【解决方案1】:

    我认为如果您使用 system() 的 1-arg 形式,第一个参数上的双引号可能不会被删除。尝试在数组中传递参数:

    system('scp', '-i', 'c:\users\userX\keyfile.ppk', 'user1@server.org:/home/user1/file1.txt', 'c:\temp\fileNEW.txt');
    

    【讨论】:

    • 非常感谢,但不幸的是,如果我使用您的方法,我仍然会收到原始错误消息。
    • 你是如何安装scp的?如果你告诉我,我可以在我的机器上试一试
    • 我认为它已经安装了......无论如何它在文件夹 c:\windows\system32\openssh 以及 ssh.exe 等中。
    • @Chazg76 是的,它也已经安装在我的机器上。在使用PuTTYgen 生成密钥后,scp 命令对我有用。我没有使用.ppk 文件,只是在命令提示符中输入密码
    • 您能否尝试使用绝对路径或相对于 ssh.exe 的路径的 ProxyCommand 选项。请参考这个网址cyberciti.biz/faq/…和这个网址superuser.com/questions/174160/…
    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 2014-03-18
    • 2014-01-15
    • 2021-07-09
    • 2014-04-11
    相关资源
    最近更新 更多