0

FTPサーバーであるサーバーBからmysqlサーバーであるサーバーA(サーバーAから)への*.zipファイルのリストを取得する必要があります。パスワードなしでSSHにPHPまたはKeyGenを使用できません。私は自分にできることには非常に制限があります。パスワードなしでsshログインを許可するPerlスクリプトを作成しようとしましたが、依存関係が継続し、ネットワークが更新のためにインターネットに接続できず、mysqlまたはftpのデフォルトフォルダーにインストールできません。 〜ホームディレクトリを離れると、アクセス許可がないためにサーバー。

次のbashスクリプトは私が望むことを正確に実行しますが、パスワードなしでsshを許可するssh-rsa / dsa-authキーを生成できないため、本番環境では使用できません。この件についてのご意見をいただければ幸いです。

`##Check tmp for previous listing

   fileExists=$(ls /tmp | grep file | wc -l);

 ## File should not exist--- Just incase we will check and remove it 
   if [ $fileExists = "1" ]; then

      rm /tmp/File.tmp

   fi

   ssh usr@100.0.0.0 ls | grep .zip >> /tmp/File.tmp

   echo "File list recieved sucessfully $DATE" >> ./logs/fileList.log

あなたが私に与えることができるかもしれないどんな指導にも前もって感謝します。

4

3 に答える 3

2

lftpユーザー名とパスワードがプロセス リストに表示されることを気にしなければ、これをすばやく行うことができます。

lftp -u username,password sftp://server -e "ls"

また、一連のコマンド全体をファイルから ( -f スイッチを使用して) 実行できるため、ユーザー名とパスワードは表示されません。ほとんどの Linux ボックスに存在するはずです。

于 2012-11-09T21:48:07.187 に答える
2

この答えはおそらくあなたが望むものではないことはわかっていますが、Net::SSH::Expectperlで使用する以外に方法はありません。あなたはすでにそれを試したことがあると思います。依存関係を整理したら、これで始められるはずです。

免責事項:テストされていませんが、他のもののために持っていた機能コードの一部を書き直しました

#!/usr/bin/perl

use warnings;
use strict;
use Net::SSH::Expect;


# Remove that file you didn't want in /tmp
if (-e '/tmp/File.tmp') { unlink('/tmp/File.tmp') }

# These should be obvious
my $username = 'bob';
my $password = 'bobsecretpassword';
my $targethosts = '100.0.0.0';

print "Trying $host... ";
my $ssh = Net::SSH::Expect->new(
  host      => $host,
  user      => $username,
  password  => $password,
) or die "Couldn't create SSH client\n";

$ssh->run_ssh() or die "Couldn't run SSH client\n";

my $output = $ssh->exec("ls *.zip");

open LOG,">>./logs/fileList.log"

my $timestamp = time();    # !!!! You probably want a better sollution for a timestamp than this
print LOG "$timestamp\tFile list received OK\n";

# Cleanup time... not a whole lot to do, tho
$ssh->close();
close LOG;

__END__

依存関係の問題については、cpan が解決してくれることを期待する以外に、あまり役に立たないのではないかと思います。cpan -i Net::SSH::Expect

モジュールをユーザー専用にインストールした後、おそらく perl に個人用モジュール ディレクトリを @INC に追加するように指示する必要がありますが、それはこの投稿の範囲を超えています (Google は時間がかかりすぎるはずです)。

または、システム管理者に賄賂を渡して、システム全体にインストールしてもらいます。

于 2012-11-09T21:02:33.567 に答える
0
#!/usr/bin/perl

use strict;
use warnings;
use Net::SFTP::Foreign;

my $sftp = Net::SFTP::Foreign->new(host => '...', user => '...', password => '...');
$sftp->setcwd('...');
$sftp->mget('*.zip');
于 2012-11-09T22:55:12.047 に答える