我已经成功地通过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'");
利用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
。