如何使用Net :: SSH2更改工作目录?

时间:2016-07-27 05:53:12

标签: perl ssh net-ssh

use Net::SSH2;
my $ssh2 = Net::SSH2->new();
$ssh2->connect($hostname);
$ssh2->auth_password($user,$pass);
$chan = $ssh2->channel();
$chan->exec("cd dir1");
$chan->exec("command file1.txt");

上述内容无效,command无法找到dir1/file1.txt。如何使用Net::SSH2更改工作目录?

1 个答案:

答案 0 :(得分:1)

根据the documentation$chan->exec()的每次调用都在其自己的进程中运行在远程上。第一个cd dir1中的exec仅影响该执行。下一个exec是一个完全独立的过程。

解决问题的最简单方法是传递命令中的完整路径,即

$chan->exec("command dir1/file1.txt");

您也可以尝试使用$chan->setenv()设置PATH变量,但这可能会被远程端禁止。

另请注意(来自process部分):

  

...还可以启动远程shell(使用shell)并模拟用户交互打印命令到其stdin流并从stdout和stderr读回数据。但是如果可能的话应该避免这种方法;与壳说话很困难,而且一般来说都不可靠。