Linux预期SFTP +放置文件

lsmd5eda  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(98)

我刚刚获得了一些帮助,通过使用ExpectSFTP连接期间自动输入密码。
然后我尝试发出一个put命令,事情又变得复杂了。

#!/usr/bin/expect
#!/bin/sh

expect -c "
spawn sftp remoteuser@*.*.*.*
expect \"remoteuser@*.*.*.*'s password:\"
send \"passwrd\r\"
interact "

echo "put output/data.xml\r"
echo "quit\r"

我的密码输入和到远程服务器的连接工作正常,但我很难在SFTP提示符下显示和执行 put output/data.xml 命令。
我的**echo“put output/data.xml\r”echo“quit\r”**行只是打印为文本,这并不完全令人惊讶,但我真的不知道还有什么可以工作。

e4eetjau

e4eetjau1#

我知道您需要一些帮助,但您至少应该尝试阅读一些内容。当您说expect -c 'some stuff ...'时,您指定了 entire expect脚本作为-c选项的参数。之后Expect会话将不存在。
此外,尝试了解interact命令的作用,而不是盲目地应用某人的建议。
不管怎样,解决办法:

expect  <<'END_EXPECT'
set timeout -1
spawn sftp remoteuser@1.2.3.4
expect "[Pp]assword:"
send "passwrd\r"
expect "whatever the sftp prompt looks like"
send "put output/data.xml\r"
expect "whatever the sftp prompt looks like"
send "quit\r"
expect eof
END_EXPECT

注意,当你第一次看到here-doc分隔符时,它是用引号引起来的。这样,你就不会受到任何shell扩展的影响。就像整个here-doc都是用单引号引起来的一样。

相关问题