2012-11-09 2 views
0

FTP 서버 인 서버 B에서 서버 A (서버로부터)의 * .zip 파일 목록을 검색해야합니다 A)는 mysql 서버이다. 암호없이 SSH에 PHP 나 KeyGen을 사용할 수 없습니다. 나는 내가 할 수있는 것에 매우 제한되어있다. 나는 비밀 번호없이 ssh 로그인을 허용하는 Perl 스크립트를 만들려고 시작했으나 의존성은 계속 유지되고 네트워크는 업데이트를 위해 인터넷에 연결할 수 없으며 mysql 또는 ftp의 기본 폴더에 설치할 수 없다. 서버가 ~ home 디렉토리를 떠나면 권한이 부족하기 때문입니다.리눅스 : 서버 A에서 서버 B의 파일 목록을 가져와야합니다. SSH에 PHP 나 KeyGen을 사용할 수 없습니다.

다음 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 [email protected] ls | grep .zip >> /tmp/File.tmp 

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

지도 해 주셔서 감사합니다.

+1

제목을 짧게하고 현재 의미가 없는지 확인하십시오. – markus

+0

첫 번째 문장과 같습니다 ... 두 개의 '에서'까지 '가 있습니다. – markus

답변

2

lftp 신속하게이 작업을 수행 할 수 있습니다

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

또한 (-f 스위치 포함) 파일에서 명령의 전체 시리즈를 실행할 수 있습니다 따라서 사용자 이름과 비밀번호가 표시되지 않습니다. 그것은 대부분의 리눅스 박스에 있어야합니다.

+0

찰스 고마워! 나는 조금 비꼬는 듯하다. 그리고 나는 네가 나에게 주었던 것과 확실히 일할 수있다. – AreYouKiddingMe

2

나는이 답변이 아마도 당신이 원하는 것이 아니라는 것을 알고 있지만, Net::SSH::Expect을 perl과 함께 사용하는 것 이외의 다른 방법은 보이지 않는다. 나는 당신이 이미 그것을 시도했을 가능성이 높습니다. 당신이 정리 종속성을 얻는 경우에, 이것은 당신이 시작할 수 있어야합니다

면책 조항 :은 테스트되지 않은,하지만 난 종속성 문제에 관해서는 몇 가지 다른 물건

#!/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

사용자를 위해서만 모듈을 설치 한 후 , 당신은 아마 개인용 모듈 디렉토리를 @INC에 추가하도록 perl에 알려주지 만이 내용은이 게시물의 범위를 벗어납니다 (Google은 어쨌든 너무 오래 걸릴 것입니다).

또는 sysadmin에게 뇌물을주고 시스템 전체에 설치하도록하십시오. 프로세스 목록에 표시 사용자 이름과 비밀번호에 대해 점잔 빼는하지 않을 경우

+0

여기에 코드를 입력 하시겠습니까 ?? – markus

+0

Jarmund, – AreYouKiddingMe

+0

에 응답 해 주셔서 감사합니다 Jarmund에 답변 해 주셔서 감사합니다. 게시 된 첫 번째 질문입니다. 게시하는 방법을 알아내어 맨발로 떠나주세요 ... 오늘 하루의 처음 7 시간 동안 모든 의존성을 설치했습니다. 'Perl Makefile.PL PREFIX = ~/mydir/lib LIB = ~/mydir/lib'을 사용하여''Net :: SSH :: Expect'에 대한 관리상의 한계를 극복하기 위해 시도해 봅니다. 또 다른 의존성을 가지고 있거나 lib 디렉토리에 privellages가 없다면 설치하려고합니다. – AreYouKiddingMe

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'); 
관련 문제