大家好
我将尝试尽可能清楚地解释我的问题,如果您不明白我的意思,请随时问我更精确的问题,请原谅我的英语,这不是我的母语。
我的目标
我想做的事情看起来很简单。假设我有 2 个服务器:S1 和 S2。
S1 是我安装并运行 Laravel 5.5 的服务器。
S2 是我有多个 PHP 脚本的服务器。
我想通过简单地单击我的 Laravel 应用程序中的按钮来运行 PHP 脚本(位于 S2 上)。
我要运行的命令是 php theNameOfMyFiles
你必须知道的事
- 在命令行中,我可以通过 S1 在 SSH 中连接到 S2:
ssh -tt -p 2222 myRemoteUser@myRemoteIp
。这工作正常。 - 我的大部分测试都会展示一些文件夹创建尝试,因为查看文件夹是否已创建比检查脚本是否正在运行更容易。
我的不同尝试
为了达到这个目标,我尝试了很多东西。首先,我正在使用 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 key ,在 keytext 字段中使用我的私有(private)/公共(public) SSH key ,但我仍然遇到同样的错误。
我试图将我的 key 的路径放在 key 字段中,但它说文件 ~/.ssh/mykey
不存在。
将我的 key 移到另一个地方也不起作用,我再次收到无法连接到远程服务器
。
尝试2
SSH::into('S1')->run(['ssh -tt -p 2222 myRemoteUser@myRemoteIp', 'mkdir testDir'])
我试图准确地重现我在命令行中所做的事情,因为我知道这行得通。我觉得我正在连接到 S2,当我查看 SSH 命令返回的内容时,我得到了 [...] Debian GNU/Linux 系统中包含的程序是免费软件 [.. .]
这与我在命令行中执行命令时收到的消息相同,但它没有创建文件夹。
请帮帮我
我的想法已经用完了,我已经在谷歌上搜索了几个小时,但我找不到如何解决我的问题,也找不到任何其他方法来做我想做的事。
如果您需要更高的精度,请随时询问。
编辑
- 我一直在尝试其他几种语法,但都没有成功。我仍然对任何建议持开放态度,接下来我会尝试 Dammeul 所说的(检查端口 2222 是否在两端打开)
最佳答案
如果您实际上可以通过“Try 2”登录,您应该以不同的方式运行代码。将您的命令附加到您的 ssh 命令。您现在正在做的是首先运行 ssh(可能挂起),然后在 ssh 完成时运行“mkdir”。相反:
SSH::into('S1')->run(['ssh -tt -p 2222 myRemoteUser@myRemoteIp "cd && mkdir testDir"'])
(我还添加了 cd
以确保您位于主目录中。
关于php - 通过 PHP 的 SSH 连接 - Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079055/