2016-12-06 17 views
1

나는 Linux expect 스크립트에 관한 문제에 직면 해있다. 인터넷 연결이있는 동일한 LAN에있는 다른 컴퓨터 B는 LAN 연결 만있는 컴퓨터 A를 가지고 있습니다. 내가하고 싶은 일은 ssh를 통해 컴퓨터 B에 로그인하여 파일을 다운로드하고 마지막으로 scp를 사용하여 컴퓨터 A에 파일을 전송할 수있는 스크립트를 작성하는 것입니다. 그리고 아래는 내 스크립트입니다.Linux를 통해 파일을 다운로드하는 방법은 무엇입니까?

#!/bin/expect 
    set url [lindex $argv 0]; 
    spawn ssh "[email protected]" 
    expect "password:" 
    send "passwd\n" 
    expect "Last login:" 
    send "cd tmp\n" 
    send "wget $url\n" 
    expect "saved" 
    send "scp * [email protected]:~/\n" 
    expect { 
    "yes/no" { send "yes\n"; exp_continue } 
    "password:" { send "passwd\n" } 
    } 
    expect "100%" 
    send "rm *\n" 
    send "exit\n" 

이제 스크립트는 wget을 끝내기 전까지 파일을 즉시 A로 scp합니다. 내 스크립트가 적절한 방법으로 가깝습니까? 만약 내가 뭘해야하지? 매우 감사합니다.

+0

당신은 훨씬 더 나은 대답을 가지고 있습니다. 예상 문제는 아마 당신이 시간 초과되었다는 것입니다. wget 호출 전에'set timeout -1'을 수행하십시오. –

답변

2

expect이 필요하지 않으며 key-based login을 사용하면 더 쉽게 사용할 수 있습니다.

SOCKS

당신은 socks proxy을 사용할 수 있습니다. 컴퓨터 A에서

:

export SOCKS_SERVER=127.0.0.1:1080

다음

ssh -D 1080 address-of-B

이제 컴퓨터 A.에서 wget을 사용할 수 있습니다

하나 라이너

컴퓨터에서 A :

ssh computer-B 'wget -O - $url' >> filename_on_computer_a 
+1

와우, 작동합니다. 내가 촬영 한 것보다 훨씬 쉽습니다. 고마워. –