2017-03-05 2 views
2

私はNet::OpenSSHモジュールを使用してrsync_getメソッドを使用してディレクトリをダウンロードしています。ディレクトリ内のファイルの中には、ログインしているユーザーが一部のファイルを読み取ることができないため、ダウンロードできないものがあります。誰かがこれに対する回避策を提案できますか? sudoコマンドでこの方法を実行する方法はありますか?sudoとしてNet :: OpenSSH :: rsync_get()メソッドを使用

答えて

0

sudoがために質問しないためにconfigurredされた場合パスワードは、あなたがあなたのポストのように行うことができます。一方

$ssh->rsync_get({rsync_path => 'sudo rsync'}, ...); 

sudoは、rootとしてコマンドを実行するためのパスワードが必要な場合は、私が最も簡単な方法は、次のようラッパースクリプトを使用することだと思いますパスワードをsudoに送信する:

#!/usr/bin/perl 
# save me as ~/bin/sudo_rsync on the target machine 

use strict; 
use warnings; 
use IO::Pty; 

my $passwd = 's3cr3t'; 

my $pty = IO::Pty->new; 
my $pid = fork; 
unless ($pid) { 
    defined $pid or die "unable to fork"; 
    $pty->make_slave_controlling_terminal; 
    do { exec 'sudo', 'rsync', @ARGV }; 
    exit -1; 
} 

print {$pty} "$passwd\n"; 
waitpid($pid, 0); 

次に、ローカルマシンから...

$ssh->rsync_get({rsync_path => '~/bin/sudo_rsync'}, 
       '/etc/shadow', '/tmp/shadow'); 

もちろん、スクリプトにハードコーディングされたパスワードを持つことは非常に悪い考えです...が、それはまたにそれを渡すために悪い考えですコマンドラインまたは環境変数で指定します。私はあなたが最初に自動化したいもののパスワードを尋ねることを避ける以外のこの問題のための素晴らしい解決策があるとは思わない!sudo

sudoのはしばらくの資格情報をキャッシュするように構成されている場合に動作します別の醜いソリューション(コマンドラインでパスワードを渡す):

$ssh->rsync_get({ rsync_path => 
        'sudo -k && ' . 
        'echo s3cr3t|sudo -Sp "" cat /dev/null && ' . 
        'sudo -Sp "" rsync' }, 
       "/etc/shadow", "/tmp/shadow"); 
関連する問題