У меня есть набор команд 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
.