2016-12-06 15 views
1

У меня возникли проблемы с сценарием linux ожидать. У меня есть компьютер A, у которого есть только подключение к локальной сети, а другой компьютер B - в той же локальной сети, которая имеет подключение к Интернету. Я хочу написать скрипт, который может войти в компьютер B через ssh и загрузить файл и, наконец, использовать 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" 

Но теперь скрипт будет скопировать файл в A немедленно, пока не закончится wget. Является ли мой сценарий подходящим для этого? Если нет, что мне делать? Огромное спасибо.

+0

У вас гораздо лучший ответ. Вероятно, вы ожидаете, что вы выбрали время. Устанавливайте таймаут -1 перед вызовом wget. –

ответ

2

Вам не нужно expect, и вы могли бы использовать key-based login, чтобы облегчить вашу жизнь.

SOCKS

Вы можете использовать socks proxy.

От компьютера A:

ssh -D 1080 address-of-B

следуют

export SOCKS_SERVER=127.0.0.1:1080

Теперь вы можете использовать wget от компьютера A.

Один лайнер

С компьютера A:

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

Ничего себе, это работает. Намного легче, чем я. Большое спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^