• Linux 命令(208)—— ssh-keygen 命令



    大咖好呀,我是恋喵大鲤鱼。

    鄙人第二本开源书籍《后台开发命令365》上线啦,欢迎大家协同共建。

    1.命令简介

    ssh-keygen 是 OpenSSH 身份验证密钥实用工具。

    ssh-keygen 用于 OpenSSH 身份验证密钥的生成、管理和转换,它支持 RSA 和 DSA 两种认证密钥。

    2.命令格式

    ssh-keygen [OPTIONS] FILE...
    
    • 1

    3.选项说明

    下面只列出常用的选项,更多选项可参考手册。

    -b BITS
    	指定密钥长度。
    -e
    	读取私有或公共 OpenSSH 密钥文件并以 -m 选项指定的格式之一将密钥打印到标准输出。
    -C
    	添加注释。
    -f FILENAME
    	指定用来保存密钥的文件名。
    -i-m 选项指定的格式读取未加密的私钥(或公钥)文件,并将 OpenSSH 兼容的私钥(或公钥)打印到 stdout。
    -l
    	显示公钥文件的指纹数据。
    -m KEY_FORMAT
    	为 -i(导入)或 -e(导出)转换选项指定密钥格式。支持的密钥格式为:“RFC4716”(RFC 4716/SSH2 公钥或私钥)、“PKCS8”(PEM PKCS8 公钥)或“PEM”(PEM 公钥)。 默认转换格式为“RFC4716”。
    -N
    	提供一个新密语。
    -P PASSPHRASE
    	提供(旧)密语。
    -q
    	静默模式。
    -t
    	指定要创建的密钥类型。可能的值为“dsa”、“ecdsa”、“ecdsa-sk”、“ed25519”、“ed25519-sk”或“rsa”。
    -y
    	从 OpenSSH 格式的私钥导出公钥。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    4.常用示例

    (1)创建一个默认密钥,缺省为 RSA 类型的密钥。

    ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/lighthouse/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/lighthouse/.ssh/id_rsa.
    Your public key has been saved in /home/lighthouse/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:c8jkpkXgRqqfelFHKxq956d+6qYzAR0kHgnaVs9gtYw lighthouse@VM-0-3-centos
    The key's randomart image is:
    +---[RSA 2048]----+
    |  ..*+=          |
    | o +.%.o.        |
    |. o EoBoo.       |
    | . .o.==o.       |
    |  .  = +S .      |
    |   .o.o+.o       |
    |    o..+         |
    |   .. o o o      |
    |  ..  .B==       |
    +----[SHA256]-----+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    中途需要三次确认,全部缺省直接回车即可。

    完成后,在 ~/.ssh 目录下将会看到两个文件:

    ls -l ~/.ssh
    id_rsa  id_rsa.pub
    
    • 1
    • 2

    id_rsa 为当前主机的私钥。id_rsa.pub 为当前主机的公钥。

    (2)指定要创建的密钥类型,缺省为 RSA。

    ssh-keygen -t rsa
    
    • 1

    (3)指定密钥的类型并添加注释。

    ssh-keygen -t rsa -C "dablelv@qq.com"
    
    • 1

    (4)读取 OpenSSH 的私钥或公钥文件。

    ssh-keygen -e
    ---- BEGIN SSH2 PUBLIC KEY ----
    Comment: "2048-bit RSA, converted by lighthouse@VM-0-3-centos from Ope"
    AAAAB3NzaC1yc2EAAAADAQABAAABAQDb1aKBbvfSefnuzLfhNKlIa4zsbBFG+m7ugZbeBW
    RwJXONhSq/AW27+Tq9zDtI6qG+UxmjIorVHbAVl4llVZz8e5b/s5I0yiBoLy/RokpvisNB
    kVkWl2oNGtkdHxTSYcJ3jdbTZ+ya6MyOiaMt24jV+zxxS1BXWxA14kS/JqiMC7lx9Vu0Ed
    AHY0zq2dj+pX31FB7Xs7p98eO+Est6msCGIInIpzGTlTskL6m7B+aMBaquWlEyQAmRX5G8
    YoOFw+aDT4q1aaaaBkFdcy/nhHPpbfM8eIzbAv+khHRjZV8XQCo+UeHzme8nmfWDCWwKZ8
    TnpO239diTdl2Wps2YCMex
    ---- END SSH2 PUBLIC KEY ----
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (5)安静模式生成密钥对。

    ssh-keygen -q -t rsa
    Enter file in which to save the key (/home/lighthouse/.ssh/id_rsa): 
    /home/lighthouse/.ssh/id_rsa already exists.
    Overwrite (y/n)? y
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (6)从 RSA 私钥导出公钥。

    ssh-keygen -y [-f PRV_KEY_FILE]
    
    • 1

    如果不通过 -f 选项指定私钥文件,则以交互方式指定。

    (7)将 OpenSSH 格式公钥转换成 OpenSSL 的 PKCS#1 格式公钥。

    ssh-keygen -e -m PEM -f id_rsa.pub > rsa_pub_key.pem
    
    • 1

    (8)将 OpenSSL 的 PKCS#8 格式公钥转换成 OpenSSH 的格式公钥。

    ssh-keygen -i -m PKCS8 -f rsa_pub_key.pem > id_rsa.pub
    
    • 1

    5.authorized_keys 和 known_hosts

    有时,你在 ~/.ssh 目录下可能还会看到 authorized_keys 和 known_hosts 这两个文件。

    • authorized_keys

    如果当前主机是 SSH 服务端,那么会有 authorized_keys,用来存放客户端机器的公钥。

    我们需要本地机器通过 SSH 访问远程服务器时为了减少输入密码的步骤,基本上都会在本地机器生成 SSH 公钥,然后将本地 SSH 公钥复制到远程主机的 ~/.ssh/authorized_keys 中,这样就可以免密登录了。

    • known_hosts

    如果当前主机为 SSH 客户端,你可能会在 ~/.ssh 目录下看到 known_hosts 文件,该文件用来记录连接过的远程主机。

    known_hosts 文件每行记录一个连接过的远程服务器的公钥。

    文件中的每一行都包含以下字段:标记符(可选)、主机名、公钥类型、base64 编码的公钥、注释。字段之间用空格分隔。

    如果是首次连接某个远程主机,那么会有安全提示是否继续连接。

    The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
    ECDSA key fingerprint is SHA256:xxxxxxxxxxxx.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    
    • 1
    • 2
    • 3

    另外,在 /etc/ssh 目录下也可能会有 ssh_known_hosts 来保存一些对所有用户都可信赖的远程主机信息。


    参考文献

    ssh-keygen(1) — Linux manual page - man7.org
    PKI - 语法[ASN.1]、规范[PKCS、X.509]、编码[DER、PEM]
    SSH_KNOWN_HOSTS FILE FORMAT
    一文读懂authorized_keys和known_hosts_游语的博客-CSDN博客
    SSH known_hosts / authorized_keys 的解释 - CSDN

  • 相关阅读:
    基于深度学习的YOLO目标检测研究-附Matlab代码
    【ACM】简单题(3)
    C#中使用list封装多个同类型对象以及组合拓展实体的应用
    C 语言学习笔记(三):C 语言开发环境搭建
    Windows 有趣功能集锦
    fastapi定时任务,增量构建可转债交易数据入mongo和qlib
    Vue 时间插件 moment 使用
    nginx配置代理转发,顺便写点负载均衡
    Seata 分布式事务 详解+使用
    第十三届蓝桥杯C++B组国赛I题——齿轮 (AC)
  • 原文地址:https://blog.csdn.net/K346K346/article/details/128167442