为什么通过 Putty 的 SSH 命令与通过 PHP 的 phpseclib 的 SSH 命令的工作方式不同?

2024-01-10

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

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

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

cd /www/
ls -la    #outputs contents of /www

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

<?php
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/');

我收到错误:

解压缩:无法找到或打开 /www/stuff.zip、/www/stuff.zip.zip 或 /www/stuff.zip.ZIP。

我努力了chmod 777 /www/stuff.zip但这没有什么区别。

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


从文档中: http://phpseclib.sourceforge.net/ssh/examples.html#chdir

连续调用 exec()

如果在交互式 shell 上完成,您收到的第一个 pwd 的输出将(取决于您的系统的设置方式)与第二个 pwd 的输出不同。然而,上面的代码片段将产生两个相同的行。

原因是,一旦 exec() 运行并且通道被删除,您对一次性 shell 所做的任何“状态更改”都会消失。

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

Try the 交互式 shell 示例 http://phpseclib.sourceforge.net/ssh/examples.html#interactiveread() and write()函数,对我来说看起来很难看。

选项2:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么通过 Putty 的 SSH 命令与通过 PHP 的 phpseclib 的 SSH 命令的工作方式不同? 的相关文章

  • AngularJS + Laravel 5 身份验证

    在使用 AngularJS 构建 SPA 时 我想在 AngularJS 网站中实现用户身份验证 但是 我不知道从哪里开始以及最佳实践是什么 基本上我有一个确定可以担任一个或多个角色 我寻找了一些例子 这样我就可以对如何正确处理这个问题有一
  • regex php - 查找 div 中具有特定 ID 的内容

    我确信这是一个简单的问题 尽管我在谷歌上进行了如此多的搜索和搜索 但我似乎无法弄清楚这有什么问题 我在此页面上的其他区域使用类似的表达式来准确返回我想要的内容 但是 我无法让这个特定的位返回我想要的东西 所以也许有人可以帮助我 我有一个带有
  • PHP日期时间“下周星期三”给我星期一

    我正在尝试使用以下方法获取下周星期三的日期new DateTime next week wednesday 然而 它返回2016 12 19 00 00 00 000000今天是星期一 为什么会这样呢 如何得到正确的结果 我尝试在在线 PH
  • PHP_CodeSniffer - 显示失败的嗅探

    PHP CodeSniffer 中是否有设置来显示失败的嗅探 我将输出与我们的编码标准进行比较 并且一一使用很难破译哪个测试失败 看看我们可能想忽略哪个 如果有一种简单的方法来显示故障嗅探 那么我可以更轻松 更快地完成配置 您可以使用 s
  • 使用 href 和 php 从 sql 数据库对 html 表进行排序

    我有一个 html 表 其中包含来自 php 吐出的 sql 表的产品数据 我想通过单击表列的标题对数据进行排序 我像这样输出我的表 php product list sql mysql query SELECT FROM products
  • PHP7 返回类型为 JSON

    PHP 7 有一个新功能 即返回类型声明 我们可以返回一个 字符串 类型 例如 function myFunction a string 我们还可以返回一个 数组 类型 例如 function myFunction a array 但是我们
  • Magento 1.8 - 高级搜索不起作用

    我在最新版本的 magento 中发现了一个奇怪的错误 高级搜索工具无法正常工作 我做了什么 安装 magento 的新副本 在管理页面添加了一个名为 测试 1 的产品 重新索引全部 清除所有缓存 At the frontend page
  • MySQL 和 PHP:多关键字搜索

    我有一个包含逗号分隔关键字的字符串 例如 keywords keyword1 keyword2 keyword3 我的表架构 名为tbl address是这样的 简化的 id INT 11 PRIMARY KEY AUTO INCREMEN
  • 使用 with 的热切加载模型,但给它起了另一个名字 - Laravel 5.2

    是否可以使用 with 方法来使用预加载 但给它另一个名称 就像是 gt with documents as product documents documents as categories 我有一个可以是产品或类别的文档表 急切加载可以
  • 将 PHP 变量保存到文本文件

    我想知道如何将 PHP 变量保存到 txt 文件 然后 再次检索它们 Example 有一个输入框 提交后写的东西 输入框将被保存到文本文件中 稍后需要结果 作为变量带回 假设变量是 text I 需要将其保存到文本文件并能够将其检索回来
  • 生成 CloudFront 签名 URL 时性能缓慢

    我正在按照此示例使用 PHP 在 CloudFront 上创建签名 URLhttp docs aws amazon com AmazonCloudFront latest DeveloperGuide CreateURL PHP html
  • 如何在 phpfarm php 安装上安装 pthreads

    记录我为帮助他人所做的努力 并希望得到一些关于我如何做得更好的反馈 命令pecl install pthreads由于我的 php 安装失败ubuntu 13 04盒子没有配置 zts Options 1 ubuntu存储库没有启用zts的
  • PHP 使用 use 关键字导入类

    到目前为止我还没有使用PHPuse词 但现在必须 索引 php内容 require once Classes MainClass php obj new Main echo obj gt test 类 MainClass php
  • 如何设置外键id的id #sf2 #doctrine2

    我正在尝试手动为对象设置外键 id 但没有找到如何执行此操作 class Item ORM ManyToOne targetEntity MyBundle Entity ItemType inversedBy itemTypes ORM J
  • PHP 静态变量用双引号引起来

    如何让 PHP 计算双引号中的静态变量 我想做这样的事情 log self CLASS METHOD entering 我尝试过各种 组合来获取变量值self CLASS 但没有任何效果 我目前已经解决了字符串连接问题 但输入起来很痛苦 l
  • 使用 PHP 将子项添加到 XML 文件

    添加子项时 抛出此错误 无法添加孩子 父级不是 XML 树的永久成员 我无法解决这个问题 这是我的代码 if visited FIRST xml new SimpleXMLElement
  • CKEditor TypeError:c[a] 在 CodeIgniter 中未定义

    我正在尝试在基于 codeigniter 的网站中安装 CKEditor 并且我已按照本教程进行操作 Codeigniter 教程中的 CKEditor http nukium com developpement php framework
  • 日期函数的奇怪行为

    我今天在 StackOverflow 上遇到了这个问题 但没有得到答案 我的问题是 echo date Y m d strtotime 2012 september 09 output 2012 09 01 echo date Y m d
  • 通过“SELECT”命令选择每组的前两条记录的最佳方法是什么?

    例如我有下表 id group data 1 1 aaa 2 1 aaa 3 2 aaa 4 2 aaa 5 2 aaa 6 3 aaa 7 3 aaa 8 3 aaa 通过 SELECT 命令选择每组的前两条记录的最佳方法是什么 如果没有
  • 正则表达式检查确切的字符串是否存在,包括#

    新问题正如 Asaph 在上一个问题中所建议的 正则表达式检查确切的字符串是否存在 https stackoverflow com questions 2824291 regex to check if exact string exist

随机推荐

  • Angular2:如何绑定以选择多个

    我可以使用绑定ngModel对于单个选择 但我想将一个数组绑定到多个选定的选项 当我尝试这样做时 我收到错误 在 myModelProperty 中找不到不同的支持对象 xxx My Code
  • 删除“.”之后的部分字符串

    我正在使用 NCBI 参考序列登录号 例如变量a a lt c NM 020506 1 NM 020519 1 NM 001030297 2 NM 010281 2 NM 011419 3 NM 053155 2 要从 biomart 包中
  • 如何修改请求的http header; C# 中的网络参考

    我正在创建一个使用 Web 服务的 NET 应用程序 我需要在对该 Web 服务的请求中将连接 http 标头设置为 关闭 我已经在谷歌上搜索了一天 但没有找到任何有用的东西 我最大的努力是下面的代码 它尝试重写 GetWebRequest
  • 开关与切换

    我正在尝试决定是否使用开关或切换来设置闹钟 我是我的 Android 应用程序 对 android 相当陌生 不知道或不太理解框架工作的所有来龙去脉 选择通过切换开关触发警报 反之亦然 会有什么缺点 android框架中有可用的滑动切换吗
  • Visual Studio 命令栏“名称”

    在 Visual Studio 2010 中 您可以创建的唯一选项是 菜单栏 上 工具 下的命令栏 在某些情况下 我想知道如何将命令栏放置在标准栏上 或者在右键单击项目文件时找到 Example Microsoft VisualStudio
  • 如何递归调用 WriteJson?

    我使用 Json Net 当我序列化一个Department2对象和WriteJson 被调用我希望它被递归地调用每个Telephone2像我一样的物体ReadJson 我怎么做 using System using Newtonsoft
  • 使用完全外连接连接 pandas 中的两个数据帧

    我在 pandas 中有两个数据框 如下所示 EmpID 是两个数据帧中的主键 df first pd DataFrame 1 A 1000 2 B np NaN 3 np NaN 3000 4 D 8000 5 E 6000 column
  • 限制直接 API 网关调用,除非来自 CloudFront

    我们在 API 前面创建了一个 CloudFront 是否可以限制来自 CloudFront 之外的 API 调用 当前设置 调用者 gt API 网关端点 gt Lambda 调用者 gt CloudFront 端点 gt API 网关端
  • Android GCM 消息发送时间过长

    我在我的应用程序中使用 GCM 但遇到了问题 大多数时候我会立即收到消息 但有时消息会在 5 分钟后收到 一条接着一条 就像它们被困在路上一样 这是正常的吗 客户端手机上的GCM框架部分使用TCP连接在端口 5228 上 此连接用于推送通知
  • 检查一个数组是否是另一个数组的子集

    关于如何检查该列表是否是另一个列表的子集有什么想法吗 具体来说 我有 List
  • 这总是GDB调试程序的地址吗?

    我将缩小我的问题范围 对于同一程序 GDB 中的入口地址保持不变 即使在重新启动后 以及在重写源代码后 这是为什么 例如0x80483f4是起始地址 0x80483f4
  • 为什么纯Python不能完全编译? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 为什么纯Python不能完全编译 编译或解释是实现的特征 而不是语言的特征 那么 难道不应该存在一些完全预先编译为本机代码的 Pyth
  • PHP:从未调用过 __autoload 函数

    所以 我有xampp 我在 ZendServer 上测试了这段代码 结果相同 在 php exe a index php 之后我有这个 Interactive mode enabled Fatal error Class Main not
  • 如何连接到第一行

    我将使用一个具体但假设的例子 Each Order通常只有一个行项目 Orders OrderGUID OrderNumber FFB2 STL 7442 1 3EC6 MPT 9931 8A 行项目 LineItemGUID Order
  • CUDA 内核可以是虚拟函数吗?

    这个问题非常简单 但让我概述一下我的框架 我有一个抽象类AbstractScheme表示一种计算类型 方程的一种离散化 但这并不重要 每个实现都必须提供一个方法来返回方案名称 并且必须实现一个受保护的函数 即 CUDA 内核 基本抽象类提供
  • 如何更改导航栏标题中链接和导航丸中链接的文本颜色(在闪亮的应用程序中)?

    这是我的闪亮应用程序的编辑版本 library shiny library bslib ui lt tagList fluidPage titlePanel tags head tags style HTML navbar default
  • Grails,使用 withTransaction 插入大量数据会导致 OutOfMemoryError

    我正在使用 Grails 1 1 beta2 我需要将大量数据导入到我的 Grails 应用程序中 如果我重复实例化一个 grails 域类然后保存它 性能会慢得令人无法接受 以从电话簿导入人员为例 for each person in l
  • 将变量传递给 jenkins 管道中的 powershell 脚本块

    有没有办法在 powershell 脚本中使用 groovy 变量 我的示例脚本如下 node stage Invoke Installation def stdoutpowershell def serverName env fqdn w
  • Vuex 模块中的 Nuxtjs Axios CORS 错误

    我正在使用 Nuxtjs 和内置 Vuex 模块以及 Nuxtjs 的官方 axios 我试图从本地服务器获取数据 但它总是抛出 CORS 错误 因此 我对 Github 的公共端点进行了 API 调用 但没有成功 仅在控制台中收到 COR
  • 为什么通过 Putty 的 SSH 命令与通过 PHP 的 phpseclib 的 SSH 命令的工作方式不同?

    我正在编写一个脚本来自动从我的 Windows 开发 PC 部署到共享托管服务器 根据我是通过 Putty 还是 PHP 执行命令 我会得到不同的结果 两者都在我的电脑上运行 在 putty 中 当我通过 SSH 登录服务器时 我可以运行如