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+ |
注意: 以下说明适用于在没有
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 是 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 文件。