написание сценария sftp с ожиданием

#sftp #expect #spawn

#sftp #ожидать #порождение

Вопрос:

Я должен написать сценарий sftp-доступа с аутентификацией по паролю. К сожалению, наш клиент не может создать аутентификацию ключа на сервере, к которому мы должны получить доступ.

Все sftp-команды генерируются и записываются во временный файл (tmp.txt ). Следующая команда отлично работает в командной строке:

 sftp OnlineRegTest_BS@ftp.b-n-c.ch < tmp.txt
  

Проблемы начинаются, когда я хотел бы использовать «ожидать», потому что я должен написать сценарий и использовать пароль.

 EXPECTSCRIPT=`cat <<EOF
    spawn sftp user@server < tmp.txt
    expect "password"
    send ${pass}
    send "r" 
EOF`
expect -c "$EXPECTSCRIPT"
  

Если я удалю «< tmp.txt «связь установится. Но мне нужны команды из tmp.txt . Вот сообщение об ошибке:

 [root@xxx web]# ./transfer.sh
spawn sftp user@server < tmp.txt
usage: sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config]
            [-o ssh_option] [-P sftp_server_path] [-R num_requests]
            [-S program] [-s subsystem | sftp_server] host
       sftp [[user@]host[:file [file]]]
       sftp [[user@]host[:dir[/]]]
       sftp -b batchfile [user@]host
send: spawn id exp6 not open
    while executing
"send password"
  

У кого-нибудь есть какие-нибудь идеи?

Я также не смог запустить его с sftp -b … 🙁

редактировать для @glenn jackman

 EXPECTSCRIPT2=`cat <<EOF
        spawn sh -c {sftp user@server < tmp.txt}
        expect "password"
        send ${pass}
        send "r"
        expect "sftp>"
        expect "sftp>"
        .....
        expect "sftp>"
        expect "sftp>"
        expect "sftp>"
EOF`
  

the tmp.txt выглядит примерно так:

 cd d
put d/d1
cd ../e
put e/e1
put e/e2
cd ../f
put f/f1
  

Комментарии:

1.Вы путаете удаленную и локальную структуру каталогов? Вы меняете каталог на d на сервере, затем помещаете локальный файл ./d/d1 на сервер. У вас есть локальный ./d каталог?

2. на самом деле да.. структура локальных папок такая же, как и на целевом сервере. Для 3 языков — папка. (d, e и f) Та же структура находится на сервере, к которому я подключаюсь. Это требование от нашего разработчика.

3. Можете ли вы использовать SSH-ключи? Если да, вам вообще не нужно ожидать.

4. к сожалению, нет! в этом и проблема! 🙁 у нашего клиента, на котором стоит сервер, нет аутентификации по ключу. И не могу его настроить !! 🙁

Ответ №1:

Попробуйте создать оболочку для обработки перенаправления:

 spawn sh -c {sftp user@example.com < tmp.txt}
  

Комментарии:

1. Спасибо. Теперь я на шаг дальше. Но он все еще работает не так, как должен. Подключение к sftp-серверу теперь в порядке. Но команды tmp.txt их не казнят. есть идеи по этому поводу? Если я добавлю много «ожидаемых» sftp>» в expectscript, это сработает.. но на самом деле это не цель. Подробности в редактировании выше.. (в вопросе)