-1

我无法安装诸如 net::ssh 之类的模块,因为我没有授权,以及其他更复杂的原因 - 所以我必须以旧方式进行,

my $host = "box215";
my $cmd_proc = "/bin/ps -ef";
my $cmd_disk = "df -h";
my $cmd = "ssh -n -o ConnectTimeout=20 $host '$cmd_proc ; $cmd_disk' ";

是我到目前为止所拥有的。

我想基本上从盒子中获取进程和磁盘空间并返回它。但是我不确定如何处理该框的密码提示。

4

3 回答 3

1

我将使用一个受限权限帐户,该帐户使用不需要密码的 SSH 密钥对服务器进行身份验证。

http://www.paulkeck.com/ssh/

于 2013-09-11T15:49:03.557 回答
1

Perl 模块可以很容易地在本地安装。这就是我通常的做法。
下载并解压 CPAN 模块和 cd 到的位置Makefile.PL并执行以下命令。<path>是您拥有完全访问权限的地方。

perl Makefile.PL PREFIX=<path> LIB=<path>
make
make test
make install

要在 Perl 脚本中使用该模块,只需在脚本开头添加以下内容

use lib '<path>';
于 2013-09-11T15:53:24.753 回答
1

如果您真的绝对 不能安装任何Perl 模块,那么您的选择会受到很大限制。我只是相信你的话,并假设你提到的无法安装模块的“其他更复杂的原因”与你老板的危及生命的 CPAN 过敏或同样可怕的事情有关,这些都没有解决通过在本地安装。这里有几个(不太理想的)选项:

  1. (最佳选择)让您的系统管理员设置 ssh 密钥,这样您就无需输入密码即可连接到远程主机。真的,即使您可以使用 Perl 模块,您也应该这样做。
  2. 使用期望脚本发送您的密码。当然,这需要安装 expect,就像选项 #1 一样,可能需要访问您的系统管理员,并伴有少量的卑躬屈膝和/或贿赂。如果你走这条路,这里有一个很好的教程(期待,而不是卑躬屈膝)。但老实说,如果您所使用的只是发送您的 ssh 密码,那么您将引入许多不必要的复杂性,可以通过设置 ssh 密钥轻松解决(参见选项 #1)。

请注意,这两个选项都可能需要您向系统管理员寻求帮助。如果他/她已经要安装/配置某些东西,您不妨要求他们在他们安装的时候为您安装一些 Perl 模块(Expect.pmNet::SSH2)(当然,除非有人可以结果死亡或严重毁容)。

于 2013-09-11T16:07:48.587 回答