Назад | Перейти на главную страницу

Как использовать SFTP BatchMode внутри EXPECT [Shell Script]

У меня есть набор команд SFTP, которые нужно запускать внутри expect.

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

expect << EOF
spawn sftp -oPort=23 -oBatchMode=no -b cmds.txt xxx@1x.2.2x.8x
sleep 3
expect "xxx@1x.2.2x.8x's password:"
send "hello123\r"
EOF

Но когда я запускаю команду ниже в интерфейсе CLI, она работает очень хорошо:

# spawn sftp -oPort=23 -oBatchMode=no -b cmds.txt xxx@1x.2.2x.8x

По соображениям безопасности я не могу использовать SCP, SSHPASS, KeyChain и т. Д.

Как только вы сказали ожидать отправки пароля, ему нечего делать, поэтому он останавливается и убивает sftp. Добавьте ожидание конца файла из созданной команды:

expect eof

Вы можете получить больше отладки от expect, запустив ее с expect -d.