php使用ssh远程调用另一个服务器执行命令(python脚本)

一、前言

      如题所示,本篇的要点就是如何用php去调用另一台服务器去执行一些命令。主要分为以下几个部分;

1、php调用命令行
2、ssh远程登录,copy文件到目标服务器
3、执行相关命令

下面咱们就来具体的说一下这几个步骤。

二、具体步骤

1、php使用exec函数调用命令行

exec($command,$output, $return);
1)使用php的exec函数 ,记得使用之前在配置文件中打开
(2)$output是代表命令输出内容
(3)$return 返回值01,如果返回0则执行成功,返回1则执行失败

      php调用命令行还有system()passthru()等函数,感兴趣的可以了解下

2、ssh跨机器执行命令

(1)登录到另一台机器
ssh 用户名@目的主机地址
(2)登录且执行命令
ssh 用户名@目的主机地址 ‘要执行的命令或者脚本’

参考:https://blog.csdn.net/zhu_xun/article/details/18736265

      这里有个问题,一般来说使用url类似于ssh://username@hostname来登录机器的话,这就是登录到目标主机上的一个用户,需要输入这个用户的密码。但是我们是程序调用的,上哪输密码去啊,所以我们采用秘钥的方式登录,并且避免服务器询问。

3、复制秘钥文件并赋予权限

      这部分主要是复制ssh密钥文件,并设置600权限。这里是为了下一步调用秘钥文件做准备,调用备份的秘钥文件安全,且权限也能自己设置。

cat a.txt > b.txt && chmod 600 b.txt;

解释

 1、将a文件的内容赋值到b文件,并且设置600权限
2&& 表示前一条命令执行成功时,才执行后一条命令
3、linux中>表示覆盖原文件内容(文件的日期也会自动更新),>>表示追加内容(会另起一行,文件的日期也会自动更新)。
 echo "当前日期是 `date`" >> hosts.log   (使用 >> 向 hosts.log中追加 当前日期)
4600权限:可读写不可运行

4、复制py文件到指定机器的指定位置

scp -o StrictHostKeyChecking=no -i 密钥文件 py文件 username@hostname:/Data/unity/

解释:

1-o StrictHostKeyChecking=no  设置连接服务器时,不进行公钥确认
2、这里是复制本机的py文件到另一台机器的/Data/unity/3、user1@cmac1 代指另一台机器的host,类似于: root@xx.xx.xx.xx

      scp在跨机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入。

5、ssh登录远程主机,执行相关命令

ssh -o StrictHostKeyChecking=no -i 密钥文件 username@hostname '具体命令'

解释:

 1-i 指定密钥文件   这里跟上目标服务器的密钥文件位置,进行ssh登录
 2、后面跟上指定的命令即可

6、部分命令解析

(1)执行py文件并显示最新的10行输出内容
cd /Data/unity/ && python3 xx.py py参数 >> log/test1.log 2>&1 && tail -n 10 log/test1.log

解释:

1)找到py文件,执行py文件
(2)把py文件输出内容保存到test1.log文件中
(32>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null   (参考:https://www.cnblogs.com/zhenghongxin/p/7029173.html)
 tail -n 文件 : 代表输入文件的倒数第几行,默认就是10行。
(2)创建文件并修改文件所有者
mkdir -p xxx && scp -i 密钥文件 username@hostname:/Data/unity/xxx && chown -R nobody:nobody xxx

解释:

1、mkdir -p 文件目录  :递归创建目录,相比于mkdir,mkdir -p可以一次创建个目录层级
2、scp命令同上
3、授权(xxx文件)为nobody权限。

7、需要注意的地方

1)php的执行用户权限,各文件的权限部分都得注意好,经常会遇到权限的问题
(2)ssh 的相关参数这里没怎么提,大家用的时候注意多查查
(3)调用php的exec()方法的时候,要注意看配置文件里面有没有给屏蔽掉,也就是下面这个函数了
disable_functions = exec,passthru,popen,proc_open,shell_exec,system,phpinfo,assert,chroot,getcwd,scandir,delete,rmdir,rename,chgrp,chmod,chown,copy,mkdir,file

end

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
您好!感谢您的提问。要实现Python脚本调用多台服务器执行PaddleOCR,您可以使用分布式计算技术来实现任务的并行执行。以下是一个简单的示例代码,演示了如何使用Python的`paramiko`库来远程执行命令并获取结果: ```python import paramiko def run_command_on_server(server_ip, username, password, command): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(server_ip, username=username, password=password) stdin, stdout, stderr = ssh.exec_command(command) output = stdout.read().decode('utf-8') ssh.close() return output # 服务器列表 servers = [ {'ip': 'server1_ip', 'username': 'username1', 'password': 'password1'}, {'ip': 'server2_ip', 'username': 'username2', 'password': 'password2'}, # 添加更多服务器... ] # 待执行命令 command = 'python your_paddleocr_script.py' # 在每台服务器执行命令 for server in servers: server_ip = server['ip'] username = server['username'] password = server['password'] output = run_command_on_server(server_ip, username, password, command) print(f'Result from {server_ip}: {output}') ``` 在上述示例中,您需要替换服务器列表中的IP地址、用户名和密码,以及将`your_paddleocr_script.py`替换为您的PaddleOCR脚本。 注意:为了使上述代码正常工作,您需要在执行代码的机器上安装`paramiko`库。您可以使用以下命令安装它: ``` pip install paramiko ``` 希望这可以帮助到您!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值