4月 24, 2023 - php开发 exec执行scp输入密码的交互命令已关闭评论
exec执行scp输入密码的交互命令
将一个文件用nginx用户的scp的方式,拷贝到另一台服务器上并使用root用户链接,如果是首次链接则可能会要求输入yes/no,和密码,则可以:
//将.env拷贝到新创建的服务器上,密码链接超时时间为300s,有提示输入yes/no则自动输入yes $scp = "expect -c 'spawn scp /var/www/html/staging/mpace-stage.ividxx.cn/.env root@182.4.2.23:/var/www/html/staging/mpxxx.ivideocloud.cn/ expect { \"*assword\" { set timeout 300; send \"MyPassword\r\"; } \"yes/no\" { send \"yes\r\"; exp_continue;} } expect eof'"; Log::debug($scp); exec("$scp 2>&1", $output, $response); Log::info($response); Log::info($output);
-c 表示可以在命令行下执行except脚本;
spawn 命令激活一个unix程序来交互,就是在之后要执行的命令;
expect “aaa” 表示程序在等待这个aaa的字符串;
send 向程序发送字符串,expect和send经常是成对出现的,比如当expect“aaa”的时候,send“bbb”。
结果: