Я успешно выполнил следующую команду через 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
команда.
Примечание. Как отметил г-н Гленн, если вам действительно нужно использовать целую оболочку, используйте interact
, Так как вы выполняете это из php
лучше продолжать expect eof
только.
Других решений пока нет …