spatie/ssh

一个轻量级的SSH连接执行命令的包

1.10.1 2024-04-05 09:15 UTC

This package is auto-updated.

Last update: 2024-09-05 10:11:18 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

您可以通过以下方式执行SSH命令

Ssh::create('user', 'host')->execute('your favorite command');

它将返回一个Symfony的Process实例。

支持我们

我们投入了大量资源来创建一流的开放源代码包。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从家乡寄来明信片,注明您正在使用我们的哪个包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上

安装

您可以通过composer安装此包

composer require spatie/ssh

用法

您可以通过以下方式执行SSH命令

$process = Ssh::create('user', 'example.com')->execute('your favorite command');

它将返回一个Symfony的Process实例。

如果您不想等待执行命令完成,您可以调用executeAsync

$process = Ssh::create('user', 'example.com')->executeAsync('your favorite command');

获取命令结果

检查您的命令是否运行正常

$process->isSuccessful();

这是获取输出的方法

$process->getOutput();

运行多个命令

要运行多个命令,请将数组传递给execute方法。

$process = Ssh::create('user', 'example.com')->execute([
   'first command',
   'second command',
]);

选择端口

您可以通过将其传递给构造函数来选择端口。

$port = 123;

Ssh::create('user', 'host', $port);

或者您可以使用usePort函数

Ssh::create('user', 'host')->usePort($port);

设置超时

您可以为命令设置超时。

Ssh::create('user', 'host')->setTimeout(100);

指定跳转主机

如果使用跳转/代理/堡垒主机,useJumpHost函数允许您设置跳转主机的详细信息

Ssh::create('user', 'host')->useJumpHost("$jumpuser@$jumphost:$jumpport");

使用SSH多路复用

如果频繁连接到同一主机,SSH多路复用允许重用TCP连接。通过调用useMultiplexing函数来设置控制主选项

Ssh::create('user', 'host')->useMultiplexing($controlPath, $controlPersist);

// Ssh::create('user', 'host')->useMultiplexing('/home/.ssh/control_masters/%C', '15m');

指定要使用的私钥

您可以使用usePrivateKey指定要使用的私钥的路径。

Ssh::create('user', 'host')->usePrivateKey('/home/user/.ssh/id_rsa');

禁用严格的主机密钥检查

默认情况下,严格的主机密钥检查是启用的。您可以使用disableStrictHostKeyChecking禁用严格的主机密钥检查。

Ssh::create('user', 'host')->disableStrictHostKeyChecking();

启用静默模式

默认情况下,静默模式是禁用的。您可以使用enableQuietMode启用静默模式。

Ssh::create('user', 'host')->enableQuietMode();

禁用密码认证

默认情况下,密码认证是启用的。您可以使用disablePasswordAuthentication禁用密码认证。

Ssh::create('user', 'host')->disablePasswordAuthentication();

上传和下载文件和目录

您可以使用以下方式将文件和目录上传到主机

Ssh::create('user', 'host')->upload('path/to/local/file', 'path/to/host/file');

或下载它们

Ssh::create('user', 'host')->download('path/to/host/file', 'path/to/local/file');

底层过程将使用scp

修改Symfony过程

幕后,所有命令都将使用Symfonys Process执行。

您可以通过使用configureProcess方法来配置Process。以下是一个示例,其中我们禁用了超时。

Ssh::create('user', 'host')->configureProcess(fn (Process $process) => $process->setTimeout(null));

立即响应对输出

您可以通过将闭包传递给onOutput来在您的命令产生输出时得到通知。

Ssh::create('user', 'host')->onOutput(function($type, $line) {echo $line;})->execute('whoami');

每当有输出时,该闭包将带两个参数被调用

  • type:这可以是常规输出的Symfony\Component\Process\Process::OUT或错误输出的Symfony\Component\Process\Process::ERR
  • line:输出本身

Windows目标

如果您的目标是Windows机器,您可以使用removeBash方法从命令行中移除bash命令。

Ssh::create('user', 'host')->removeBash();

测试

composer test

更新日志

有关最近更改的详细信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全

如果您发现了关于安全的bug,请发送邮件至security@spatie.be,而不是使用问题跟踪器。

替代方案

如果您需要更多功能,请查看DivineOmega/php-ssh-connection

鸣谢

Ssh类包含从laravel/envoy中获取的代码。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件