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”。
结果:

参考链接:https://www.cnblogs.com/feiyun8616/p/7778283.html

评论被关闭。