frzb/ssh

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

v1.0.0 2023-12-15 15:42 UTC

This package is auto-updated.

Last update: 2024-09-15 17:30:40 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)。有关更多信息,请参阅许可证文件