文章目录

  • 一、前言
  • 二、具体步骤
    • 1、php使用exec函数调用命令行
    • 2、ssh跨机器执行命令
      • (1)登录到另一台机器
      • (2)登录且执行命令
    • 3、复制秘钥文件并赋予权限
    • 4、复制py文件到指定机器的指定位置
    • 5、ssh登录远程主机,执行相关命令
    • 6、部分命令解析
      • (1)执行py文件并显示最新的10行输出内容
      • (2)创建文件并修改文件所有者
    • 7、需要注意的地方

一、前言

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

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

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

二、具体步骤

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

exec($command,$output, $return);
(1)使用php的exec函数 ,记得使用之前在配置文件中打开
(2)$output是代表命令输出内容
(3)$return 返回值0或1,如果返回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中追加 当前日期)
4、600权限:可读写不可运行

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文件中
(3)2>&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

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

  1. python paramiko远程执行命令打开窗口_使用Paramiko在远程机器上通过sshClient()执行本地python脚本...

    这是我在StackOverflow中的第一篇文章,所以我希望以正确的方式做到这一点!

  2. linux启动本地远程服务,如何使用SSH在本地控制远程服务器执行命令

    通过SSH在本地控制远程服务器执行命令,如果每次都要登录到远程服务器真的好麻烦,起始通过SSH就可以远程执行 在本地使用 ssh $RemoteNode    可以在执行远程机器上的命令,例如 ssh ...

  3. 无需公网IP,SSH远程内网linux服务器

    通常内网服务器没有公网IP,外网无法直接访问.我们可以通过一个公网服务器发起连接,来实现外网远程访问内网的服务器. 我这里用的是cpolar内网穿透,支持http/https/tcp协议,可以永久免费 ...

  4. ssh远程执行服务器命令,ssh远程连接服务器执行命令

    问题 首先说一下使用ssh远程连接服务器执行命令的方法: 为了方便描述,这里把测试服务器称之为A1,目标服务器称之为A2 A1与A2之间首先要建立ssh免密登录,在A1上生成公钥和私钥 ssh-key ...

  5. ssh 远程防止断网神器 - screen 命令

    我们在使用需要 SSH 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如AI训练.系统备份.ftp传输等等.通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执 ...

  6. html服务器端运行python,如何通过点击网页在远程服务器上运行python脚本?

    我在远程服务器上有一个python程序.我需要创建一个web页面(html代码和服务器上python脚本所在的目录相同)有一个按钮,单击哪个python脚本应该运行.还有一件事是我们需要从本地机器上选 ...

  7. 电脑计算机显示调用失败和未执行,远程调用过程失败且未执行的详细处理方法...

    在操作电脑的过程中,很多用户都遇到过系统提示远程调用过程失败且未执行的情况,那这是怎么回事呢?其实这是由于错误操作触发了系统中的保护程序而造成,所以针对这一问题,今天本文为大家整理的就是关于远程调用过 ...

  8. redis从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

    另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃.

  9. 服务器如何启动运行,如何在服务器系统启动或重新启动时执行命令或脚本

    作为一个Linux系统的管理员,甚至是一个普通的Linux用户,你可能需要定期或在需要的时候运行一些命令或脚本.我们使用crontab来完成这些任务,我们在教程中已经讨论过Crontab.但是,我们如 ...

最新文章

  1. WPF实用指南二:移除窗体的图标
  2. Terraform入门 - 3. 变更基础设施
  3. Python安装、使用MySQL数据库
  4. 同步轨道进入过程_“收官之星”定点成功!北斗三号卫星全部进入长管模式
  5. 【手写数字识别】基于matlab GUI BP神经网络手写数字识别系统【含Matlab源码 1639期】
  6. 特征选择relief算法介绍
  7. 分治——线性时间选择算法
  8. python百度网盘-百度网盘 Python 客户端
  9. jQuery 事件冒泡
  10. Android改变标题栏背景颜色
  11. java做mmo服务器_MMO聊天服务器设计
  12. Assuming drive cache: write through,可能不是错误信息,只是提示信息
  13. bd-rate的计算
  14. 链队的创建、入队、出队
  15. 笔记本电脑属于个人计算机吗,黄真真:笔记本电脑属于个人计算机的一种形式莫?...
  16. 验证中的随机种子(seed),VCS
  17. 进阶课程⑩ | Apollo地图采集方案
  18. Kali+mitmproxy 超级详细的ssl劫持和窥窃动妹子上网动态(劫包,返回想要的内容)
  19. SpotlessCity:第一个干洗服务网站 反映纽约人有多懒
  20. 华为的备胎被迫转正。

热门文章

  1. CMAKE_C_COMPILER not set
  2. RecursionError: maximum recursion depth exceeded
  3. MySQL8.0设置远程访问权限
  4. Python代码规范和命名规范
  5. python ffmpeg pyav
  6. Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR
  7. openCV—Python(6)—— 图像算数与逻辑运算
  8. c++多线程队列 类对象
  9. VS2015 error MSB6006: “cmd.exe”已退出 代码为 3
  10. 快速理解平衡二叉树、B-tree、B+tree、B*tree