aleex1848 / ssh
一个轻量级包,用于通过SSH连接执行命令
Requires
- php: ^7.4|^8.0
- symfony/process: ^4.4|^5.3|^6.0|^7.0
Requires (Dev)
- pestphp/pest: ^1.22
- spatie/pest-plugin-snapshots: ^1.1
- symfony/var-dumper: ^5.3|6.0|^7.0
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
变更日志
请参阅 变更日志 了解最近更改的信息。
贡献
请参阅 贡献指南 了解详细信息。
安全
如果您发现有关安全的错误,请发送电子邮件至 security@spatie.be 而不是使用问题跟踪器。
替代方案
如果您需要更多功能,请查看 DivineOmega/php-ssh-connection。
致谢
Ssh
类包含来自 laravel/envoy 的代码。
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。