ssh-keygen 为ssh生成、管理和转换身份验证密钥。ssh-keygen可以创建供ssh协议版本1使用的RSA密钥和供SSH协议版本2使用的RSA或DSA密钥。要生成的密钥类型是用-t选项指定的。如果不带任何参数调用,ssh-keygen将生成一个RSA密钥,用于ssh协议2连接。

ssh-keygen还用于生成用于 Diffie-Hellman 组交换 (DH-GEX) 的组。
通常,每个希望将 SSH 与 RSA 或 DSA 身份验证一起使用的用户都会运行一次,以在~/.ssh/identity~/.ssh/id_dsa~/.ssh/id_rsa中创建身份验证密钥。此外,系统管理员可以使用它来生成主机密钥,如/etc/rc所示。

通常,该程序会生成密钥并要求一个文件来存储私钥。公钥存储在同名但附加了“.pub”的文件中。该程序还要求输入密码。密码可以为空表示没有密码(主机密钥必须有一个空的密码),也可以是任意长度的字符串。密码短语类似于密码,不同之处在于它可以是包含一系列单词、标点符号、数字、空格或任何您想要的字符串的短语。好的密码短语长度为 10-30 个字符,不是简单的句子或其他容易猜到的(英文散文每个字符只有 1-2 位熵,并且提供了非常糟糕的密码短语),并且包含大小写字母、数字、和非字母数字字符。稍后可以使用-p选项更改密码。

没有办法恢复丢失的密码。如果密码丢失或忘记,则必须生成一个新密钥并将其复制到相应的公钥到其他机器。

对于 RSA1 密钥,密钥文件中还有一个注释字段,只是为了方便用户帮助识别密钥。注释可以说明密钥的用途或有用的信息。创建密钥时,注释被初始化为 ‘‘user@host’’,但可以使用-c选项进行更改。

生成密钥后,下面的说明详细说明了应将密钥放置在何处以进行激活。

问题

[root@master ~]# ssh 192.168.10.195
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:SJBJH6u/Qtn1fY+Fcw9sOxlqT6Wda8bWn+NBh40HgII.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:63
ECDSA host key for 192.168.10.195 has changed and you have requested strict checking.
Host key verification failed.

-H Hash a known_hosts file
这将用指定文件中的哈希表示替换所有主机名和地址;原始内容被移动到带有. old后缀的文件中。ssh和sshd可能会正常使用这些散列,但是如果文件内容被泄露,它们不会泄露识别信息。此选项不会修改现有的散列主机名,因此在混合了散列和非散列名称的文件上使用是安全的。

-R hostname
从known_hosts文件中删除属于hostname的所有密钥。此选项对于删除哈希主机非常有用(请参见上面的-H选项)。

[root@master ~]# ssh-keygen -R 192.168.10.195
# Host 192.168.10.195 found: line 63
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

再次尝试登录,即可登录成功!

文件

Man手册
~//identity
包含用户的协议版本 1 RSA 身份验证身份。除用户外,任何人都不应读取此文件。生成密钥时可以指定密码;该密码将用于使用 3DES 加密此文件的私有部分。ssh-keygen不会自动访问此文件,但它作为私钥的默认文件提供。ssh 将在尝试登录时读取此文件。

~/.ssh/identity.pub
包含用于身份验证的协议版本 1 RSA 公钥。该文件的内容应添加到用户希望使用 RSA 身份验证登录的所有计算机上的~/.ssh/authorized_keys中。无需将此文件的内容保密。

~/.ssh/id_dsa
包含用户的协议版本 2 DSA 身份验证身份。除用户外,任何人都不应读取此文件。生成密钥时可以指定密码;该密码将用于使用 3DES 加密此文件的私有部分。ssh-keygen不会自动访问此文件,但它作为私钥的默认文件提供。ssh 将在尝试登录时读取此文件。

~/.ssh/id_dsa.pub
包含用于身份验证的协议版本 2 DSA 公钥。该文件的内容应添加到用户希望使用公钥身份验证登录的所有机器上的~/.ssh/authorized_keys中。无需将此文件的内容保密。

~/.ssh/id_rsa
包含用户的协议版本 2 RSA 认证身份。除用户外,任何人都不应读取此文件。生成密钥时可以指定密码;该密码将用于使用 3DES 加密此文件的私有部分。ssh-keygen不会自动访问此文件,但它作为私钥的默认文件提供。ssh 将在尝试登录时读取此文件。

~/.ssh/id_rsa.pub
包含用于身份验证的协议版本 2 RSA 公钥。该文件的内容应添加到用户希望使用公钥身份验证登录的所有机器上的~/.ssh/authorized_keys中。无需将此文件的内容保密。

/etc/ssh/moduli
包含用于 DH-GEX 的 Diffie-Hellman 组。

环境

   SSH_USE_STRONG_RNG

OpenSSL随机生成器的重新播种通常在/dev/urandom中完成。如果SSH_USE_STRONG_RNG环境变量设置为0以外的值,OpenSSL随机生成器将从/dev/random重新设定种子。读取的字节数由SSH_USE_STRONG_RNG值定义。最小为6个字节。不建议在没有硬件随机生成器的计算机上使用此设置,因为熵不足会导致连接被阻塞,直到有足够的熵可用。
Don’t strive for, then you are not even qualified to fail!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐