一个轻量级包,用于通过SSH连接执行命令

1.0 2024-02-23 10:48 UTC

This package is auto-updated.

Last update: 2024-09-23 12:01:13 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

变更日志

请参阅 变更日志 了解最近更改的信息。

贡献

请参阅 贡献指南 了解详细信息。

安全

如果您发现有关安全的错误,请发送电子邮件至 security@spatie.be 而不是使用问题跟踪器。

替代方案

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

致谢

Ssh 类包含来自 laravel/envoy 的代码。

许可证

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