我正在编写一个脚本来自动部署从我的Windows开发PC到共享托管服务器.

根据我是通过Putty还是PHP(都在我的PC上运行)执行命令,我得到的结果会有所不同.

在putty中,当我通过SSH登录服务器时,我可以运行如下命令:

cd /www/

ls -la #outputs contents of /www

但是当我通过PHP使用phpseclib执行此操作时,如下所示,任何cd命令都被完全忽略:

require_once __DIR__.'/vendor/autoload.php';

use phpseclib\Net\SSH2;

$ssh = new SSH2('ssh.mydomain.com');

if (!$ssh->login('mydomain.com', 'mypassword')) {

trigger_error("Login Failed", E_ERROR);

}

echo $ssh->exec('pwd');

$ssh->exec('cd /www/');

echo $ssh->exec('pwd'); // unchanged

echo $ssh->exec('ls -la'); // does NOT output contents of /www/

echo $ssh->exec('ls /www/ -la'); // DOES output contents of /www/

在上面指定绝对URL是可接受的解决方法.但是,以下是一个主要问题.

如果我上传一个文件,stuff.zip到/ www /然后尝试提取它,以下通过Putty工作:

unzip /www/stuff.zip -d /www/

但是如果我通过PHP尝试这个:

echo $ssh->exec('unzip /www/stuff.zip -d /www/');

我收到错误:

unzip: cannot find or open /www/stuff.zip, /www/stuff.zip.zip or /www/stuff.zip.ZIP.

我试过chmod 777 /www/stuff.zip,但没有区别.

我该如何诊断/解决这个问题?

解决方法:

Successive calls to exec()

If done on an interactive shell, the output you’d receive for the first pwd would (depending on how your system is setup) be different than the output of the second pwd. The above code snippet, however, will yield two identical lines.

The reason for this is that any “state changes” you make to the one-time shell are gone once the exec() has been ran and the channel has been deleted.

我看到两个选择.选项1:

尝试使用read()和write()函数的interactive shell examples,这对我来说非常难看.

选项2:

将您的脚本编写为服务器上的shell脚本,并使用单个$ssh-> exec()调用来调用脚本.

标签:php,ssh,putty,phpseclib

来源: https://codeday.me/bug/20191007/1868127.html

php用putty安装吗,为什么通过Putty的SSH命令与PHP的phpseclib不同?相关推荐

  1. putty更新linux运行程序,PuTTY for linux

    PuTTY 是免费开源的虚拟终端,PuTTY 支持多种网络协议,包括 SCP/SSH/Telnet/rlogin 和原始的套接字连接,PuTTY 最初仅支持 Windows 平台,目前 PuTTY 已 ...

  2. linux怎么卸载webpack,安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc

    安装webpack后,执行webpack -v命令时报错如下: [root@FreeServer ~]# webpack -v /usr/local/node-v4.4.7-linux-x64/lib ...

  3. Windows安装用于OCR的Tesseract及使用命令行参数进行OCR

    Windows安装用于OCR的Tesseract及使用命令行参数进行OCR 1. 效果图 2. Tesseract 安装及验证 参考 这篇博客将介绍如何安装和使用光学字符识别(OCR Optical ...

  4. 安装需要的第三方库时,命令行输入pip提示不是内部或外部命令

    简介 在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装. 然而有时敲入pip命令会提示'pip'不是内部或外部命令..如图: 解决办法 1.在python安装目录 ...

  5. MySQL数据库介绍、安装(服务端软件安装、客户端软件安装(图形化界面客户端和命令行客户端))

    1. MySQL数据库的介绍 MySQL是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System, ...

  6. yarn全局安装vue/cli vue不是内部命令

    yarn全局安装vue/cli vue不是内部命令 在使用 yarn global add @vue/cli安装 @vue/cli之后 执行vue --version 报错:'vue' 不是内部或外部 ...

  7. python路径在哪里设置_找Python安装目录,设置环境路径以及在命令行运行python脚本实例...

    第一点:找Python安装目录 方法一: 方法二: 输入import sys print(sys.path) 化黑线处 第二点:找到安装目录后就可以开始设置环境变量 这里我的安装目录为C:\Progr ...

  8. Linux/deppin 中安装、卸载软件的几种命令

    title: Linux/deppin 中安装.卸载软件的几种命令 date: 2019-04-28 00:00:00 Linux/deppin 中安装.卸载软件的几种命令 1.在终端里 apt-ge ...

  9. 第一:Python安装需要的第三方库时,命令行输入pip提示不是内部或外部命令

    在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装. 然而有时敲入pip命令会提示'pip'不是内部或外部命令..如图: 解决办法 1.在python安装目录中找得 ...

  10. mac安装gnu make_Linux Make的使用以及命令安装详解

    对于GNU Make或许很多Windows开发的程序员并不是很了解,因为Windows中的很多集成开发环境(IDE)都帮我们做了这件事.但是作为一个专业从事Linux嵌入式开发的程序员就必须要了解GN ...

最新文章

  1. 毕业十年后,我忍不住出了一份程序员的高考试卷
  2. 王维嘉:神经网络的本质是在数据里面提取相关性
  3. 【深度学习入门到精通系列】什么是消融实验(Ablation experiment)
  4. 技术圈鄙视链形成的真实原因?
  5. Linux bind-utils
  6. JVM虚拟机-Class文件之访问标志
  7. 列出IIS上的虚拟目录和网站信息。
  8. 详解 TCP/IP 协议
  9. C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)
  10. 在Rammap(内存分析工具)的基础上实现自动优化
  11. app逆向 安卓开发环境搭建
  12. 前端接收pdf文件_前端利用pdfobject.js处理pdf文件
  13. 记录 FPGA加速器设计CNN(论文笔记)
  14. C#使用System.Speech制作语音提示功能。
  15. (转载) Android RecyclerView 使用完全解析 体验艺术般的控件
  16. 【我们一起写框架】MVVM的WPF框架(五)—完结篇
  17. .com.cn域名是什么?.com.cn域名有哪些优势?
  18. Linux下的motion detection(最简单的办公室监控系统) 邮件自动发送
  19. 租用国外服务器应该注意哪些?
  20. source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符) 问题解决

热门文章

  1. “按字典序输出方案” 解决方法
  2. 对 n = 2,3,...,300, 判断那些 Mersenne 数 M_n=2^n-1 是素数 | matlab 源码
  3. Spring——依赖注入的三种方式
  4. spring4.1.8扩展实战之七:控制bean(BeanPostProcessor接口)
  5. 绘图QPainter-字体
  6. mysql常见的存储引擎
  7. Linux环境进程间通信(一)管道和FIFO
  8. html 伪元素原理,CSS伪类伪元素详解
  9. Java 集合中的快速失败(fail-fast)和安全失败(fail-safe)机制
  10. MyBatis源码阅读(九) --- 插件原理