spatie / 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
更新日志
有关最近更改的详细信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献指南。
安全
如果您发现了关于安全的bug,请发送邮件至security@spatie.be,而不是使用问题跟踪器。
替代方案
如果您需要更多功能,请查看DivineOmega/php-ssh-connection。
鸣谢
Ssh
类包含从laravel/envoy中获取的代码。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。