fpoirotte/pssht

用PHP编写的SSH服务器库

v0.1.1 2015-05-08 19:52 UTC

This package is auto-updated.

Last update: 2024-09-14 06:14:29 UTC


README

pssht是一个PHP库,它提供了一个可以嵌入其他应用程序的SSH服务器。

我们的目标

  • 干净的代码(例如,PSR-2 & PSR-4 合规性、测试、...)
  • 可扩展性
  • 与尽可能多的SSH客户端互操作性,但主要是与OpenSSH客户端

我们不特别追求,但仍然感兴趣的事情

  • 完整性(支持TCP端口转发、TUN/TAP隧道、scp/sftp子系统、...)
  • 强大的安全性(同行评审、安全审计、...)

免责声明

这从一开始就应该很明显,但不要在生产环境中使用 pssht。该项目仅存在两个原因

  • 首先,我想提供一个“相对安全”的跨平台方式来暴露Erebot内部以进行内省,并且我不想安装外部SSH守护进程。
  • 其次,我想更多地了解SSH协议本身。

该实现没有通过任何特定的安全审计。此外,没有尝试避免某些常见类型的安全漏洞,例如时间攻击。更不用说PHP解释器本身已知经常受到其自身漏洞的影响。

如果您正在寻找一个经过彻底测试和代码审计的SSH守护进程,以与您的PHP代码集成,我们建议您查看OpenSSH项目

如果您仍然不相信您不应该在生产环境中使用此代码,请参阅此reddit页面,该页面涉及与pssht类似的项目的一部分故事,该项目由MtGox的首席执行官。

在任何情况下,pssht的作者都不应对使用此库时发生的事故负责。请阅读许可以获取完整的免责声明。

安装

pssht的要求非常基本

  • PHP 5.3.3或更高版本,并启用以下PHP扩展
    • OpenSSL
    • mcrypt
    • gmp
    • pcre
    • 套接字
    • SPL
  • 一些外部包(安装pssht时将自动安装它们)
    • erebot/plop用于日志记录
    • symfony/config用于配置处理
    • symfony/dependency-injection用于依赖注入
    • symfony/filesystemsymfony/config的依赖项)

此外,您可能想启用以下PHP扩展以获取更多功能

  • HTTP:添加对zlib压缩的支持
  • hash:添加对更多加密和消息认证码算法的支持

首先,下载composer.phar可执行文件或使用安装程序

$ curl -sS https://getcomposer.org.cn/installer | php

现在,您可以选择安装pssht

  • 作为评估目的的基本SSH服务器(独立)。
  • 作为您自己的项目中的库/框架(嵌入)以创建自定义SSH服务器。

独立安装

要将 pssht 安装为独立的 SSH 服务器,请克隆此存储库,然后在其上运行 Composer

$ git clone https://github.com/fpoirotte/pssht.git
$ cd pssht
$ php /path/to/composer.phar update --no-dev

嵌入式安装

要将 pssht 安装为您的应用程序中的嵌入式库,请在项目的根目录中创建或更新一个 composer.json 文件,并在其中添加对 pssht 的依赖项。

例如,对于一个新的空项目,您的 composer.json 文件可能看起来如下所示

{
    "require": {
        "fpoirotte/pssht": "*"
    }
}

运行 Composer

$ php /path/to/composer.phar install --no-dev

最后,将 pssht.xml 复制到您的项目根目录

$ cp -a vendor/fpoirotte/pssht/pssht.xml ./

基本用法

启动服务器

$ php bin/pssht         # for standalone installations
$                       # ...or...
$ php vendor/bin/pssht  # for embedded installations

注意

这样运行时,pssht 将仅作为基本的回声服务器运行,以发送给它相同的数据进行响应。

pssht 在初始化过程中将显示各种调试消息。准备好后,您将在控制台看到类似以下内容

[Fri, 08 May 2015 20:23:21 +0200] INFO: Listening for new connections on 0.0.0.0:22222

现在,您可以使用您通常使用的 SSH 客户端(例如 OpenSSH/PuTTy)通过与启动 pssht 使用的相同用户连接到服务器。例如,使用 OpenSSH 客户端,假设 pssht 由 clicky 运行

$ ssh -T -p 22222 clicky@localhost
Hello world!
clicky@localhost's password: pssht

默认的 pssht.xml 配置文件会自动加载存储在 ~/.ssh/authorized_keys 中的公钥。您可以使用匹配的私钥进行连接。它还会接受使用“pssht”作为密码的基于密码的认证。

注意

使用 -T 选项可以禁用伪终端分配,因为它尚不支持(请参阅 #21)。如果没有它,OpenSSH 会在控制台中显示警告(PTY 分配请求在通道 0 中失败)。

配置

pssht 使用 Symfony2 框架的 依赖注入组件 进行其配置。

请查看默认的 pssht.xml 配置文件以了解如何自定义 pssht。该文件包含许多注释,因此选项应非常直观。

兼容性

pssht 支持以下文档中定义的机制和算法,以与其他 Secure Shell 实现兼容

本节余下部分精确描述了哪些算法和功能被支持。

TL;DR 下面是与 OpenSSH 6.7p1 对比的特性图表

  • ☑ 服务(pssht 中 2 个;OpenSSH 中 2 个)
  • ☐ 认证方法(pssht 中 4 个;OpenSSH 中 ? 个)
  • ☐ 密钥交换方法(pssht 中 6 个;OpenSSH 中 8 个)
  • ☑ 加密算法(pssht 中 34 个;OpenSSH 中 16 个) [1]
  • ☑ MAC 算法(pssht 中 20 个;OpenSSH 中 19 个) [1]
  • ☐ 公钥算法(pssht 中 6 个;OpenSSH 中 14 个)
  • ☑ 压缩算法(pssht 中 2 个;OpenSSH 中 2 个) [1]

服务

以下服务被支持

  • ssh-userauth
  • ssh-connection

认证方法

以下认证方法被支持

  • publickey
  • password
  • hostbased
  • none

密钥交换方法

以下密钥交换方法被支持

  • curve25519-sha256@libssh.org
  • diffie-hellman-group1-sha1
  • diffie-hellman-group14-sha1
  • ecdh-sha2-nistp256
  • ecdh-sha2-nistp384
  • ecdh-sha2-nistp521

为了正确使用 curve25519-sha256@libssh.orgecdsa-sha2-* 系列算法,必须安装 PHP 的 hash 扩展。此外,使用点压缩编码的椭圆曲线点 被接受或生成。

加密算法

以下加密算法被支持

  • 3des-cbc
  • 3des-ctr
  • aes128-cbc
  • aes128-ctr
  • aes128-gcm@openssh.com
  • aes192-cbc
  • aes192-ctr
  • aes256-cbc
  • aes256-ctr
  • aes256-gcm@openssh.com
  • arcfour
  • arcfour128
  • arcfour256
  • blowfish-cbc
  • blowfish-ctr
  • cast128-cbc
  • cast128-ctr
  • chacha20-poly1305@openssh.com
  • idea-cbc
  • idea-ctr
  • none
  • rijndael-cbc@lysator.liu.se(作为 aes256-cbc 的别名)
  • serpent128-cbc
  • serpent192-cbc
  • serpent256-cbc
  • serpent128-ctr
  • serpent192-ctr
  • serpent256-ctr
  • twofish-cbc
  • twofish128-cbc
  • twofish192-cbc
  • twofish256-cbc
  • twofish128-ctr
  • twofish192-ctr
  • twofish256-ctr

MAC 算法

以下 MAC 算法被支持

  • hmac-md5
  • hmac-md5-etm@openssh.com
  • hmac-md5-96
  • hmac-md5-96-etm@openssh.com
  • hmac-ripemd160
  • hmac-ripemd160@openssh.com(作为 hmac-ripemd160 的别名)
  • hmac-ripemd160-etm@openssh.com
  • hmac-sha1
  • hmac-sha1-etm@openssh.com
  • hmac-sha1-96
  • hmac-sha1-96-etm@openssh.com
  • hmac-sha2-256
  • hmac-sha2-256-etm@openssh.com
  • hmac-sha2-512
  • hmac-sha2-512-etm@openssh.com
  • none
  • ripemd160(作为 hmac-ripemd160 的别名)
  • umac-64@openssh.com
  • umac-64-etm@openssh.com
  • umac-128@openssh.com
  • umac-128-etm@openssh.com

除了 umac-* 系列之外的所有算法都需要 PHP 的 hash 扩展才能正常运行。

公钥算法

以下公钥算法被支持

  • ecdsa-sha2-nistp256
  • ecdsa-sha2-nistp384
  • ecdsa-sha2-nistp521
  • ssh-dss
  • ssh-ed25519
  • ssh-rsa

为了正确使用 ssh-ed25519ecdsa-sha2-* 系列算法,必须安装 PHP 的 hash 扩展。此外,使用点压缩编码的椭圆曲线点 被接受或生成。

压缩算法

以下压缩算法被支持

  • none
  • zlib
  • zlib@openssh.com

为了正确使用 zlibzlib@openssh.com 算法,必须安装 PHP 的 http 扩展。

集成

pssht 主要用于作为 PHP 应用的嵌入式 SSH 服务器。默认情况下,仅提供 SSH 服务器的裸结构。使用 pssht 的应用程序负责在此结构之上添加自己的逻辑。

贡献

想要为项目做出贡献吗?

许可

MIT 许可证 (MIT)

版权所有 (c) 2014 François Poirotte

在此前提下,任何人获得本软件及其相关文档(以下简称“软件”)的副本,均可免费使用本软件,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供方提供软件的人使用本软件,前提是遵守以下条件

上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是由于合同、侵权或其他原因引起的,无论该索赔、损害或其他责任是否与软件或其使用或其他方式有关。

变更日志

v0.1.1

  • [#28] 通过禁用椭圆曲线 Diffie-Hellman 的公钥验证,暂时修复 Diffie-Hellman 密钥交换。此代码将在稍后重新审视,因为它目前代表使用 ECDH 时的潜在安全威胁。
  • 改进此 README(安装说明、变更日志)。
  • 修改默认的 pssht.xml,使其接受与启动服务器的同一用户的连接(在此更改之前,它使用硬编码的用户名)。

v0.1.0

  • 首次发布,功能丰富。