SSH 密钥相关命令

SSH 密钥相关命令

ssh-keygen

ssh-keygen 命令用于生成及管理密钥,支持 RSA 和 DSA 两种认证密钥

1
ssh-keygen 参数
  • -b:指定密钥长度,对于 RSA 密钥,最小要求 768 位,默认是 2048 位。DSA 密钥必须恰好是 1024 位(FIPS 186-2 标准的要求)
  • -B:显示指定的公钥/私钥文件的 bubblebabble 摘要
  • -e:读取 OpenSSH 的私钥或公钥文件,并以 RFC 4716 SSH 公钥文件格式在 stdout 上显示出来
  • -C:添加注释
  • -c:修改私钥和公钥文件中的注释,只支持 RSA1 密钥;需输入密钥文件名 + 密码(passphrase) + 新注释
  • -f:指定密钥文件名
  • -i:读取未加密的 SSH-2 兼容的私钥/公钥文件,然后在 stdout 显示 OpenSSH 兼容的私钥/公钥
  • -l:显示公钥文件的指纹数据
  • -N:提供新密码(passphrase)
  • -P:提供旧密码(passphrase)
  • -q:安静模式
  • -t:指定要创建的密钥类型,支持:rsa1(SSH-1)rsa(SSH-2)dsa(SSH-2)
1
ssh-keygen -t rsa -C "demo@gamil.com"

ssh-copy-id

ssh-copy-id 命令可以将本地的公钥复制到远程主机的 authorized_keys 文件中,并且会给远程主机的用户主目录(home)和 ~/.ssh, 和 ~/.ssh/authorized_keys 设置合适的权限;如果没有指定公钥文件,则默认为 ~/.ssh/identity.pub

1
ssh-copy-id [-i [identity_file]] [user@]machine
  • -i:指定公钥文件

该命令并不会检测 authorized_keys 是否有重复的公钥,也就是说多次执行相同命令,会同一个公钥会添加多次

1
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

ssh-agent

ssh-agent 是一个密钥管理器,用于保存公钥身份验证所使用的私钥;运行 ssh-agent 命令以后,使用 ssh-add 将私钥交给 ssh-agent 保管,其他程序需要身份验证的时候可以将验证申请交给 ssh-agent 来完成整个认证过程。

1
2
ssh-agent [-c | -s] [-d] [-a bind_address] [-t life] [command [arg ...]]
ssh-agent [-c | -s] -k
  • -c:生成 C-shell 风格的命令输出
  • -d:调试模式
  • -k:kill ssh-agent 进程
  • -s:生成 Bourne shell 风格的命令输出
  • -t life:设置默认值添加到代理人的身份最大生命周期
1
2
# 打印对应的环境变量
ssh-agent

ssh-add

ssh-add 命令会将密钥添加到 ssh-agent 的高速缓存中。

1
2
3
ssh-add [-c | D | d | L | l | X | x] [-t life] [file ...]
ssh-add -s pkcs11
ssh-add -e pkcs11
  • -D:删除 ssh-agent 中的所有密钥
  • -d:从 ssh-agent 中删除指定的密钥
  • -e pkcs11:删除 PKCS#11 共享库 pkcs1 提供的密钥
  • -s pkcs11:添加 PKCS#11 共享库 pkcs1 提供的密钥
  • -L:显示 ssh-agent 中所有的公钥
  • -l:显示 ssh-agent 中所有的私钥
  • -t life:对加载的密钥设置超时时间,超时 ssh-agent 将自动删除对应的密钥
  • -X:对 ssh-agent 进行加锁
  • -x:对 ssh-agent 进行解锁
1
2
3
4
5
# 将对应的私钥加至 ssh-agent 中
ssh-add ~/.ssh/id_dsa

# 删除指定的私钥
ssh-add -d ~/.ssh/id_xxx.pub