golang高效管理多组SSH密钥的插件库skm的使用

Golang高效管理多组SSH密钥的插件库skm的使用

简介

SKM是一个简单而强大的SSH密钥管理器。它可以帮助你轻松管理多组SSH密钥!

skm截图

主要特性

  • 创建、列出、删除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

1 回复

更多关于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)
}

实用技巧

  1. 别名设置:为常用命令设置shell别名

    alias skml='skm list'
    alias skmu='skm use'
    
  2. 自动切换:在项目目录中添加.skm文件,内容为密钥集名称,然后使用钩子自动切换

  3. 多账户Git配置:结合Git的includeIf配置实现不同项目使用不同账户

    [includeIf "gitdir:~/work/"]
      path = ~/.gitconfig-work
    [includeIf "gitdir:~/personal/"]
      path = ~/.gitconfig-personal
    

注意事项

  1. skm会修改~/.ssh目录下的文件,使用时请确保已备份重要密钥

  2. 在团队环境中使用时,建议每个成员管理自己的密钥集

  3. 敏感操作如删除密钥集会要求确认,避免误操作

skm通过简单的命令行界面提供了强大的SSH密钥管理功能,特别适合需要同时处理多个Git账户或项目的开发者。它的轻量级设计和Go语言实现保证了跨平台兼容性和高性能。

回到顶部