Platform Swift GitHub license

Build Status

CocoaPods Compatible Swift Package Manager

SshConfig

SshConfig 使加载、解析和解码/编码 SSH 配置变得快速而简单。它还有助于通过主机名解析属性,并在您的应用程序中安全地使用它们(感谢 Swift 中的 Optional 和静态类型)。

目录

特性

用法

让我们尝试加载、解析和解码 SSH 配置文件,并查看如何使用它的基本场景。

~/.ssh/config 文件内容

Host gitlab.com github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa
  User xxlabaza

Host my*
  User admin
  Port 2021

Host *
  SetEnv POPA=3000

代码示例

import SshConfig

let config = try! ssh.Config.load(path: "~/.ssh/config")

let github = config.resolve(for: "github.com")
assert(github.preferredAuthentications == [.publickey])
assert(github.identityFile == ["~/.ssh/id_rsa"])
assert(github.user == "xxlabaza")
assert(github.setEnv == ["POPA": "3000"]) // from 'Host *'
assert(github.port == 22) // the default one

// github.com and gitlab.com resolve the same properties set
assert(github == config.resolve(for: "gitlab.com"))

let myserver = config.resolve(for: "myserver")
assert(myserver.user == "admin")
assert(myserver.port == 2021)
assert(myserver.setEnv == ["POPA": "3000"]) // from 'Host *'

let backend = config.resolve(for: "backend")
assert(backend.user == nil) // the default one
assert(backend.port == 22) // the default one
assert(backend.setEnv == ["POPA": "3000"]) // from 'Host *'

相同的 ssh.Config 实例可以通过编程方式构建,如下所示

注意: 我使用可变参数的闭包列表来设置 ssh.Properties 实例所需的属性,该实例在 ssh.Host 初始化器内部创建。我发现这种方法更类似于原始的 ssh 配置文件格式,而且您可以忽略 ssh.Properties 的字段顺序。

import SshConfig

let config = ssh.Config(
  ssh.Host("gitlab.com github.com",
    { $0.preferredAuthentications = [.publickey] },
    { $0.identityFile = ["~/.ssh/id_rsa"] },
    { $0.user = "xxlabaza" }
  ),
  ssh.Host("my*",
    { $0.user = "admin" },
    { $0.port = 2021 }
  ),
  ssh.Host("*",
    { $0.setEnv = ["POPA": "3000"] }
  )
)

...

更多代码示例和例子可在 网站 和测试中找到(尤其是在 UsageExample.swift 文件中)。

安装

要求

Swift 5.1+

iOS watchOS tvOS macOS
13+ 6+ 13+ 10.15+

Swift Package Manager

注意: 以下说明适用于在没有 Xcode UI 的情况下使用 SwiftPM。最简单的方法是转到您的项目设置 -> Swift Packages 并从那里添加 SshConfig。

Swift Package Manager - 是推荐的安装方法。您只需要将以下内容作为依赖项添加到您的 Package.swift 文件中

.package(url: "https://github.com/xxlabaza/SshConfig.git", from: "1.0.1"),

所以,您的 Package.swift 可能看起来像下面这样

// swift-tools-version:5.1

import PackageDescription

let package = Package(
  name: "MyPackage",
  platforms: [ // The SshConfig requires the versions below as a minimum.
    .iOS(.v13),
    .watchOS(.v6),
    .tvOS(.v13),
    .macOS(.v10_15),
  ],
  products: [
    .library(name: "MyPackage", targets: ["MyPackage"]),
  ],
  dependencies: [
    .package(url: "https://github.com/xxlabaza/SshConfig.git", from: "1.0.1"),
  ],
  targets: [
    .target(name: "MyPackage", dependencies: ["SshConfig"])
  ]
)

然后在任何需要的地方导入

import SshConfig

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。有关用法和安装说明,请访问其网站。要使用 CocoaPods 将 SshConfig 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

pod 'SshConfig'

最终,您的 Podfile 应该看起来像这样

# The SshConfig requires the versions below as a minimum.
# platform :ios, '13.0'
platform :osx, '10.15'
# platform :tvos, '13.0'
# platform :watchos, '6.0'

target 'MyApp' do
  use_frameworks!

  pod 'SshConfig'
end

然后运行

pod install

在将 cocoapod 安装到您的项目后,使用以下命令导入 SshConfig

import SshConfig

更新日志

要查看项目最近版本中的更改,请参阅 changelog 文件。

贡献

请阅读 contributing 文件,详细了解我的行为准则以及向我提交 pull request 的流程。

版本控制

我使用 SemVer 进行版本控制。有关可用版本,请参阅 此仓库上的标签

作者

许可证

本项目根据 Apache License 2.0 许可证获得许可 - 有关详细信息,请参阅 license 文件。