golang高效管理多组SSH密钥的插件库skm的使用
Golang高效管理多组SSH密钥的插件库skm的使用
简介
SKM是一个简单而强大的SSH密钥管理器。它可以帮助你轻松管理多组SSH密钥!
主要特性
- 创建、列出、删除SSH密钥
- 通过别名管理所有SSH密钥
- 设置默认SSH密钥
- 通过别名显示公钥
- 将默认SSH密钥复制到远程主机
- 重命名SSH密钥别名
- 备份和恢复所有SSH密钥
- 提供SSH密钥选择的交互式界面
- 可自定义SSH密钥存储路径
安装
使用Homebrew安装
brew tap timothyye/tap
brew install timothyye/tap/skm
使用Go安装
go get github.com/TimothyYe/skm/cmd/skm
手动安装
从发布页面下载并解压到/usr/bin或PATH目录中。
使用示例
初始化SSH密钥存储
第一次使用时应初始化SSH密钥存储:
skm init
SKM会在$HOME/.skm
创建SSH密钥存储并将所有SSH密钥放入其中。
创建新SSH密钥
skm create prod -C "abc@abc.com" -t ed25519
目前仅支持RSA和ED25519密钥。
列出SSH密钥
skm ls
设置默认SSH密钥
skm use dev
显示公钥
显示当前SSH公钥:
skm display
显示特定别名的SSH公钥:
skm display prod
删除SSH密钥
skm delete prod
复制SSH公钥到远程主机
skm cp timothy@example.com
重命名SSH密钥别名
skm rn test tmp
备份SSH密钥
skm backup
恢复SSH密钥
skm restore ~/skm-20171016172828.tar.gz
与SSH代理集成
添加密钥到SSH代理缓存:
skm cache --add my
从SSH代理缓存中移除密钥:
skm cache --del my
列出SSH代理缓存中的密钥:
skm cache --list
自定义SSH密钥存储路径
在~/.bashrc
或~/.zshrc
中添加:
SKM_STORE_PATH=/usr/local/.skm
钩子机制
在密钥目录下创建可执行的hook
文件,例如:
~/.skm/prod/hook
示例hook脚本:
#!/bin/bash
git config --global user.name "YourNewName"
git config --global user.email "YourNewEmail@example.com"
然后使hook文件可执行:
chmod +x hook
SKM在切换默认SSH密钥后会调用此hook文件。
许可证
MIT License
更多关于golang高效管理多组SSH密钥的插件库skm的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang高效管理多组SSH密钥的插件库skm的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用skm高效管理多组SSH密钥
skm (SSH Key Manager) 是一个用Go编写的轻量级工具,专门用于管理多组SSH密钥。它可以帮助开发者在不同项目或不同Git账户之间快速切换SSH密钥,提高工作效率。
安装skm
# 使用go安装
go install github.com/TimothyYe/skm@latest
# 或者下载预编译二进制
# 从GitHub releases页面下载对应平台的二进制文件
基本使用
1. 初始化skm
skm init
这会创建~/.skm
目录作为skm的存储根目录。
2. 创建密钥集
# 创建名为"work"的密钥集
skm create work
# 创建名为"personal"的密钥集并指定邮箱
skm create personal -e personal@example.com
3. 列出所有密钥集
skm list
4. 切换密钥集
skm use work
高级功能
1. 导入现有密钥
skm import work ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
2. 备份和恢复
# 备份所有密钥集
skm backup ~/ssh_backup
# 从备份恢复
skm restore ~/ssh_backup
3. 删除密钥集
skm delete work
Go集成示例
以下是如何在Go程序中集成skm功能的示例:
package main
import (
"fmt"
"os/exec"
)
func main() {
// 列出所有密钥集
listKeys()
// 切换到工作密钥
switchKey("work")
// 创建新密钥集
createKey("new-project", "new@example.com")
}
func listKeys() {
cmd := exec.Command("skm", "list")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("Error listing keys: %v\n", err)
return
}
fmt.Println("Available SSH key sets:")
fmt.Println(string(output))
}
func switchKey(keyName string) {
cmd := exec.Command("skm", "use", keyName)
err := cmd.Run()
if err != nil {
fmt.Printf("Error switching to key %s: %v\n", keyName, err)
return
}
fmt.Printf("Successfully switched to %s key set\n", keyName)
}
func createKey(name, email string) {
args := []string{"create", name}
if email != "" {
args = append(args, "-e", email)
}
cmd := exec.Command("skm", args...)
err := cmd.Run()
if err != nil {
fmt.Printf("Error creating key %s: %v\n", name, err)
return
}
fmt.Printf("Successfully created %s key set\n", name)
}
实用技巧
-
别名设置:为常用命令设置shell别名
alias skml='skm list' alias skmu='skm use'
-
自动切换:在项目目录中添加
.skm
文件,内容为密钥集名称,然后使用钩子自动切换 -
多账户Git配置:结合Git的
includeIf
配置实现不同项目使用不同账户[includeIf "gitdir:~/work/"] path = ~/.gitconfig-work [includeIf "gitdir:~/personal/"] path = ~/.gitconfig-personal
注意事项
-
skm会修改
~/.ssh
目录下的文件,使用时请确保已备份重要密钥 -
在团队环境中使用时,建议每个成员管理自己的密钥集
-
敏感操作如删除密钥集会要求确认,避免误操作
skm通过简单的命令行界面提供了强大的SSH密钥管理功能,特别适合需要同时处理多个Git账户或项目的开发者。它的轻量级设计和Go语言实现保证了跨平台兼容性和高性能。