我想基本上从远程计算机复制文件,复制后删除它们。
我已设法使用expect和scp复制文件。 此外,设法删除脚本之外的文件,但无法在脚本中使用ssh命令。 这就是我所拥有的
#!/usr/bin/expect -f
log_user 1
set timeout -1
set pass "pass"
spawn scp user@remote.machine.com:Desktop/LoginCheck/Login/* .
expect {
password: {send "$pass\r" ; exp_continue}
}
ssh user@remote.machine.com 'rm -rf Desktop/LoginCheck/Login/*'
expect {
password: {send "$pass\r" ; exp_continue}
}
因此代码的scp
部分可行。
但是ssh
和rm -rf
这是ssh的错误
invalid command name "ssh"
while executing
有人可以提供工作脚本吗?
答案 0 :(得分:1)
ssh命令不应该是新的生成器吗?顺便说一句,只需阅读wikipedia article on expect,其中一个“缺点”是:
针对Expect的一个不太明显的论点是它可以启用 次优解决方案。例如,系统管理员需要 登录到多个服务器以进行自动更改可能会使用Expect with 存储密码,而不是ssh代理密钥的更好解决方案。 自动化交互式工具的能力很有吸引力,但也有 经常是其他可以完成相同任务的选项 稳健的方式。
听起来你正在完成示例次优解决方案。如果您使用的是正确的ssh密钥对,则根本不需要预期。
答案 1 :(得分:1)
将ssh
替换为spawn ssh
- ssh
不是expect
的内置命令。
答案 2 :(得分:1)
你刚刚错过了ssh行前面的spawn:
spawn ssh user@remote.machine.com 'rm -rf Desktop/LoginCheck/Login/*'
您还应该在它之前添加wait
行,可能会检查scp的退出代码。
在任何情况下,不要使用expect来自动化ssh,使用ssh键和sh脚本,就像所描述的其他海报一样。