3

expectPerl スクリプトでシステム コールを使用して、リモート サーバー上にディレクトリを再帰的に作成しようとしています。関連する呼び出しは次のとおりです。

system("expect -c 'spawn  ssh  $username\@$ip; expect '*?assword:*' {send \"$password\r\"}; expect '*?*' {send \"mkdir -p ~/$remote_start_folder/$remote_folder_name/$remote_username/$remote_date/\r\"}; expect '*?*' {send \"exit\r\"};  interact;'");

これはうまくいきます。ただし、 を使用してリモート amchine に初めてアクセスするssh場合は、確認を求められ(yes/no)ます。上記のステートメントのどこにそれを追加すればよいかわかりません。それを上記のステートメントに組み込む方法はありますか(ある種のor-ingを使用)?

4

2 に答える 2

2

あなたは不必要にあなたの人生を複雑にしています。

Perl に期待するような機能が必要な場合は、Expectモジュールを使用してください。

SSH 経由でリモート サーバーとやり取りしたい場合は、CPAN から入手できる SSH モジュールのいくつかを使用します: Net::OpenSSHNet::SSH2Net::SSH::Any

リモートホストキーを確認したくない場合は、オプションStrictHostKeyChecking=noを渡します。ssh

例えば:

use Net::OpenSSH;

my $ssh = Net::OpenSSH->new($ip, user => $username, password => $password,
                            master_opts => [-o => 'StrictHostKeyChecking=no']);

my $path = "~/$remote_start_folder/$remote_folder_name/$remote_username/$remote_date";
$ssh->system('mkdir -p $path')
    or die "remote command failed: " . $ssh->error;
于 2013-10-09T07:49:34.897 に答える