通过PHP连接SSH – Laravel

大家好

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

我的目标

我想做的事情看起来很简单.假设我有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’)我都会得到一个无法连接到远程服务器RuntimeException.

我尝试没有任何SSH密钥,在keytext字段中使用私有/公共SSH密钥,但我仍然得到相同的错误.

我试图将关键字段中的路径放到我的键中,但它说文件〜/ .ssh / mykey不存在.

将我的密钥移动到另一个地方也不起作用,我无法再次连接到远程服务器.

试试2

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

我试图在命令行中重现我正在做的事情,因为我知道它可以工作.我觉得我正在连接到S2,当我正在查看SSH命令返回的内容时我正在[…] Debian GNU / Linux系统附带的程序是免费软件[…]当我在命令行中执行命令时,我得到的消息是相同的,但它不是创建文件夹.

请帮帮我

我的想法已经不多了,我一直在谷歌搜索几个小时,但我找不到如何解决我的问题或任何其他方式做我想做的事情.

如果您需要更高的精度,请随时询问.

编辑

>我一直在尝试其他语法,但没有成功.我仍然对任何建议持开放态度,接下来我会尝试Dammeul所说的(检查端口2222两端是否打开)

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

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

(我还添加了cd以确保您在主目录中.

点赞