【问题标题】:SSH connection via PHP - Laravel通过 PHP 的 SSH 连接 - Laravel
【发布时间】:2019-02-04 08:06:28
【问题描述】:

大家好

我将尽可能清楚地解释我的问题,如果您不明白我的意思,请随时问我更准确的意思,并原谅我的英语不是我的母语。


我的目标

我想做的事情看起来很简单。假设我有 2 台服务器:S1 和 S2。
S1 是我安装并运行 Laravel 5.5 的服务器。
S2 是我有多个 PHP 脚本的服务器。
我想通过在我的 Laravel 应用程序中单击一个按钮来运行一个 PHP 脚本(在 S2 上)。
我要运行的命令是php theNameOfMyFiles


你必须知道的事情

  1. 在命令行中,我可以在 SSH 中通过 S1 连接到 S2:ssh -tt -p 2222 myRemoteUser@myRemoteIp。这工作正常。
  2. 我的大部分测试都会显示一些创建文件夹的尝试,因为这样更容易查看文件夹是否已创建,而不是检查脚本是否正在运行。

我的不同尝试

为了达到这个目标,我尝试了很多方法。首先,我使用Laravelcollective SSH 5.2 能够从我的 Laravel 应用程序中使用 SSH。
我的配置文件config/remote.php,这是我指定远程服务器连接的地方:

return [
    default' => 'S1',
   'connections' => [
    'S1' => [
        'host'      => '127.0.0.1',
        'username'  => 'myUsername',
        'password'  => 'myPassword',
        'key'       => '',
        'keytext'   => '',
        'keyphrase' => '',
        'agent'     => '',
        'timeout'   => 10,
    ],
    'S2' => [
        'host'      => 'myRemoteIP',
        'username'  => 'myRemoteUser',
        'port'      => '2222',
        'password'  => '',
        'key'       => '',
        'keytext'   => '',
        'keyphrase' => '',
        'agent'     => '',
        'timeout'   => 30,
        'directory' => '/home/myRemoteUser/'
    ]

试试 1

SSH::into('S2')->run(['mkdir imAtestDirectory']);

每次我尝试使用 SSH::into('S2') 时都会收到 Unable to connect to remote server RuntimeException。

我尝试不使用任何 SSH 密钥,在 keytext 字段中使用我的私有/公共 SSH 密钥,但我仍然遇到同样的错误。

我试图将我的密钥路径放在 key 字段中,但它显示文件 ~/.ssh/mykey 不存在。

将我的钥匙移动到另一个地方也不起作用,我又得到了Unable to connect to remote server。

试试 2

SSH::into('S1')->run(['ssh -tt -p 2222 myRemoteUser@myRemoteIp', 'mkdir testDir'])

我试图准确地重现我在命令行中所做的事情,因为我知道这可以工作。我觉得我正在连接到 S2,当我查看 SSH 命令返回的内容时,我得到了[...] The programs included with the Debian GNU/Linux system are free software [...],这与我在命令行中执行命令时得到的消息相同,但是它不是创建文件夹。


请帮帮我

我的想法已经用完了,我已经在谷歌上搜索了几个小时,但我找不到如何解决我的问题或任何其他方式来做我想做的事。

如果您需要更精确的信息,请随时询问。


编辑

  1. 我一直在尝试其他几种语法,但没有成功。我仍然愿意接受任何建议,接下来我会尝试 Dammeul 所说的(检查端口 2222 是否在两端都打开)

【问题讨论】:

  • 2222端口是否两端开放?
  • 我可以使用来自 S1 的telnet myRemoteHost 2222。我不能使用 S2 中的telnet myHost 2222。
  • 听起来 S2 上的端口可能已关闭。值得检查你是否可以打开它/看看它是否打开
  • 当我在命令行中使用ssh -tt -p 2222 myRemoteUser@myRemoteIp 时也不会成为问题吗? (因为这是完美的工作......)
  • 您不会使用您的公钥进行身份验证。 Web 服务器以什么用户身份运行?它可以访问您的密钥吗?

标签: php bash laravel laravel-5 ssh


【解决方案1】:

如果您实际上可以通过“Try 2”登录,您应该以不同的方式运行代码。使用 ssh 命令附加您的命令。您现在正在做的是首先运行 ssh(可能会挂起),然后在 ssh 完成时运行“mkdir”。而是:

SSH::into('S1')->run(['ssh -tt -p 2222 myRemoteUser@myRemoteIp "cd && mkdir testDir"'])

(我还添加了cd 以确保您位于主目录中。

【讨论】:

  • 非常感谢!您的解决方案完美运行!不过,我对不尝试这种语法感到愚蠢
【解决方案2】:

ssh 可以通过以下步骤使用 ip ,端口和 ssh 密码。

  1. 打开 cmd 提示符。
  2. 输入 ssh root@191.123.2.3 -p 23202(ip - 191.123.2.3,端口 - 23202)。
  3. 如果要求使用 yes/no 进行身份验证,请键入 yes 并输入。
  4. cd /var/www/html/

您的 ssh cmd 提示将启动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2012-08-28
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多