我已经通过php成功执行了以下命令,但它只能直接使用。如果已添加主机或任何预期不匹配,则意味着它失败。任何人都可以建议一种方法来处理这个问题,即使预期不匹配它应该转到下一步吗?
shell_exec("expect -c 'spawn sudo su - root -c \"ssh-copy-id -i " . $host . "\"
expect \"yes/no\"
send \"yes\r\"
expect \"password:\"
send \"yyyy\r\"
interact'");
答案 0 :(得分:2)
利用exp_continue
解决问题。
"expect -c 'spawn sudo su - root -c \"ssh-copy-id -i " . $host . "\"
expect {
\"yes/no\" {send \"yes\r\";exp_continue}
\"password:\" {send \"yyyy\r\"}
}
interact'"
如果Expect
看到yes/no
,会发送yes
,然后它会再次继续;
如果看到password
,则会发送密码。之后,它将继续interact
命令。
注意:正如Mr.Glenn所指出的,如果你真的需要完整的shell,请使用interact
。由于您是从php
执行此操作,因此最好只使用expect eof
。