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

dev-main 2024-03-26 08:20 UTC

This package is auto-updated.

Last update: 2024-09-26 09:22:20 UTC


README

你可以这样执行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

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全

如果您发现有关安全的bug,请通过security@rocketeers.app发送邮件,而不是使用问题跟踪器。

替代方案

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

致谢

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

许可证

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