You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

expect脚本exec调用scp命令后无法自动发送密码输入指令如何解决?

你现有代码失效的核心原因是使用了exec执行scp命令,该命令会直接替换当前运行的expect进程,后续的密码匹配、发送逻辑完全没有执行机会,因此只能手动输入密码。

修正后可用的基础代码

#!/usr/bin/expect

# spawn会启动scp子进程,允许expect捕获其输出、控制其输入
spawn scp pi@你的树莓派实际IP:/home/pic.jpg pic.jpg

# 匹配密码输入提示
expect "*assword: "
# 发送密码加回车完成输入
send "raspberry\r"

# 等待scp传输完成、进程退出再结束脚本,避免传输中断
expect eof

常见场景适配说明

  • 首次连接树莓派时,scp会弹出主机密钥确认提示,会导致密码匹配逻辑卡住,可以扩展匹配规则处理该场景:
#!/usr/bin/expect

spawn scp pi@你的树莓派实际IP:/home/pic.jpg pic.jpg

expect {
    "Are you sure you want to continue connecting (yes/no/[fingerprint])?" {
        send "yes\r"
        exp_continue
    }
    "*assword: " {
        send "raspberry\r"
    }
}

expect eof
  • 也可以直接给scp添加参数跳过主机密钥校验,无需额外处理首次连接逻辑,只需把spawn行修改为:
    spawn scp -o StrictHostKeyChecking=no pi@你的树莓派实际IP:/home/pic.jpg pic.jpg

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:36:04