[转帖]ssh-keygen的学习总结

ssh-keygen介绍

 

https://www.cnblogs.com/kerrycode/p/9410928.html

其实 用 ssh-copy-id 就可以

这个文章讲的非常详细。

 

 

维基百科上关于ssh-keygen的介绍如下:

 

    ssh-keygen is a standard component of the Secure Shell (SSH) protocol suite found on Unix and Unix-like computer systems used to establish secure shell sessions between remote computers over insecure networks, through the use of various cryptographic techniques. The ssh-keygen utility is used to generate, manage, and convert authentication keys.

 

    ssh-keygen is able to generate a key using one of three different digital signature algorithms.

With the help of the ssh-keygen tool, a user can create passphrase keys for any of these key types (to provide for unattended operation, the passphrase can be left empty, at increased risk).

扫描二维码关注公众号,回复: 9520497 查看本文章

These keys differ from keys used by the related tool GNU Privacy Guard.

 

  Oracle Solaris 11.2 Information Library (简体中文)手册中关于ssh-keygen的介绍如下: 

 

ssh-keygen主要用于为ssh(远程登录程序)生成、管理和转换验证密钥。ssh-keygen 可以创建供 SSH 协议版本 1 使用的 RSA 密钥,以及供 SSH 协议版本 2 使用的 RSA 或DSA 密钥。生成的密钥类型使用t选项指定。ssh-keygen 还可以生成指纹或从指定为 PKCS#11 URI 的 X.509v3 证书转换公钥。

 

通常,希望将 SSH 与 RSA 或 DSA 验证结合使用的每个用户应运行一次此实用程序,以便在 $HOME/.ssh/identity、$HOME/.ssh/id_dsa  $HOME/.ssh/id_rsa 中创建验证密钥。系统管理员还可以使用此实用程序生成主机密钥。

 

通常,此程序会生成密钥并要求提供一个存储私钥的文件。公钥存储在附加了 ".pub" 扩展名的同名文件中。该程序还要求提供口令短语。口令短语可以为空,表示没有口令短语(主机密钥必须具有空口令短语),也可以为任意长度的字符串。好的口令短语长度在 10-30 个字符,不是简单的句子或其他容易猜到的句子,由大写字母、小写字母、数字和非字母数字字符组合而成。(普通英文句子中的每个字只有 1-2 位的熵,提供的口令短语非常差。)如果设置口令短语,则长度必须至少为 4 个字符,后面可以使用 –p选项更改口令短语。

 

无法恢复丢失的口令短语。如果丢失或忘记口令短语,您必须生成一个新密钥并将相应的公钥复制到其他计算机。

 

对于 RSA,密钥文件中还包含一个注释字段,该字段只是为了便于用户识别密钥。comment 字段可以说明密钥的用途或提供任何有用信息。创建密钥时,注释将初始化为"user@host",但可以使用 –c 选项进行更改。

 

密钥生成后,可以使用下面的详细说明了解应将密钥放在何处,以便激活密钥。

 

当我们需要跨服务器实现免密码自动登陆,因此我们首先需要使用ssh-keygen生成登陆密钥。生成登陆密钥需要三个步骤,在本地机器创建密钥,复制公钥到远程主机,将公钥追加到远程主机的authorized_keys

 

 

 

 

1: 生成钥文件和私钥文件

 

 

ssh-keygen它支持RSA和DSA两种认证密钥,下面是的一些注意参数(可以使用 ssh-keygen /? 看看参数信息):

 

 

–b bits
 
指定要创建的密钥的位数。最小位数为 512 位。通常,2048 位足以满足安全需要。密钥大小超过该值并不会提高安全性,反而会降低速度。缺省值为 2048 位。
 
–B
显示指定的私钥或公钥文件的 bubblebabble 摘要。
 
–c
请求更改私钥和公钥文件中的注释。该程序会提示您提供包含私钥的文件、口令短语(如果密钥具有一个口令短语)以及新的注释。
此选项仅适用于 rsa1 (SSHv1) 密钥。
 
–C comment
提供新注释。
 
 
–e
 
此选项读取 OpenSSH 私钥或公钥文件并将密钥以 "SECSH" 公钥文件格式输出到 stdout。此选项允许导出密钥供其他一些 SSH 实现使用。
–f
 
指定密钥文件的文件名。
–F
 
在known_hosts 文件中搜索指定的 hostname,列出找到的任何匹配项。此选项可用于查找散列格式的主机名或地址,还可以与 –H 选项一起使用,以散列格式输出找到的密钥。
 
–H
 
对 known_hosts 文件执行散列计算。此选项使用散列形式替换指定文件内的所有主机名和地址。原始内容将移动到后缀为 .old 的文件中。这些散列值通常由 ssh 和 sshd 使用,即使文件内容被公开,这些散列值也并不会透露可识别的信息。此选项不会修改现有的散列主机名,因此可以放心地用于同时包含散列名称和非散列名称的文件。
 
–i
 
此选项以 SSH2 兼容格式读取未加密的私钥(或公钥)文件并将 OpenSSH 兼容的私钥(或公钥)输出到 stdout。ssh-keygen 还可读取 “SECSH” 公钥文件格式。此选项允许从其他一些 SSH 实现中导入密钥。
 
–l
 
显示指定的私钥或公钥文件的指纹。
 
–N new_passphrase
 
提供新口令短语。
 
–p
请求更改私钥文件的口令短语,而不创建新私钥。该程序会提示您提供包含私钥的文件、旧口令短语,并两次提示您输入新口令短语。
 
–P passphrase
提供(旧)口令短语。
 
–q
退出 ssh-keygen。
 
–t type
 
指定用于生成密钥的算法,其中 type 是 rsa、dsa 和 rsa1 中的一种。rsa1 类型仅用于 SSHv1 协议。
 
–R hostname
从 known_hosts 文件中删除属于 hostname 的所有密钥。此选项可用于删除散列主机。请参见 –H。
 
–x
已过时。已被 –e 选项取代。
 
–X
已过时。已被 –i 选项取代。
 
–y
此选项读取 OpenSSH 私钥格式文件并将 OpenSSH 公钥输出到 stdout。

 

 

判断.ssh目录是否存在,不存在则创建目录并赋予权限。目录存在即可跳过

 

 

.ssh目录存在

 

$ ls -la ~/.ssh
total 12
drwx------  2 oracle oinstall 4096 May 20  2015 .
drwx------ 22 oracle oinstall 4096 Jul  3 13:36 ..
-rw-r--r--  1 oracle oinstall 1579 Dec  7  2017 known_hosts

 

.ssh目录不存在

 

$ ls -la ~/.ssh
ls: /home/oracle/.ssh: No such file or directory
$mkdir ~/.ssh 
$chmod 700 ~/.ssh

 

测试发现,其实执行下面命令生成ssh 密钥后,会在当前用户的主目录下创建.ssh目录。因此,上述步骤其实完全可以忽略

 

 

[oracle@mylnx01 ~]$ ssh-keygen -t rsa
 
Generating public/private rsa key pair.
 
Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 
 
Enter passphrase (empty for no passphrase): 
 
Enter same passphrase again: 
 
Your identification has been saved in /home/oracle/.ssh/id_rsa.
 
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
 
The key fingerprint is:
 
ae:cb:6a:9c:60:72:bc:2c:27:dc:1f:06:e6:c8:1d:0c [email protected]

 

上述可以按ENTER键后空格键跳过(口令短语可以为空),生成ssh 密钥后,可以到~/.ssh目录下查看相关文件,一般来说ssh 密钥会包含id_rsa和id_rsa.pub两个文件,分别表示生成的私钥和公钥。

 

 

 

 

2: 复制公钥到远程目标服务器

 

 

#复制公钥到远程服务器,例如,此处为服务器192.168.xxx.xxx

 

[oracle@mylnx01 ~]$ scp ~/.ssh/id_rsa.pub 192.168.xxx.xxx:~/.ssh 
 
[email protected]'s password: 
 
id_rsa.pub     

 

在复制密钥前,应该先去远程服务器(此处为mylnx02)执行下面操作。

 

 

正确的操作步骤:

 

1:验证目录是否存在

 

[oracle@mylnx02 ~]$  ls -la ~/.ssh

ls: /home/oracle/.ssh: No such file or directory

 

2: 创建.ssh目录(如果目录已经存在可以忽略后续步骤)

 

[oracle@mylnx02 ~]$ mkdir ~/.ssh

 

3:  设置目录权限

 

[oracle@mylnx02 ~]$ chmod 700 ~/.ssh

 

4: 创建空文件authorized_keys

 

[oracle@mylnx02 ~]$ touch ~/.ssh/authorized_keys

 

5:  给文件authorized_keys授权

 

[oracle@mylnx02 ~]$ chmod 600 ~/.ssh/authorized_keys

 

6:  验证上述操作

 

[oracle@mylnx02 ~]$ ls -la ~/.ssh
total 8
drwx------  2 oracle oinstall 4096 Aug  1 07:20 .
drwx------ 11 oracle oinstall 4096 Aug  1 07:20 ..
-rw-------  1 oracle oinstall    0 Aug  1 07:20 authorized_keys

 

 

 

3:追加公钥到远程主机的authorized_keys

 

[oracle@mylnx02 ~]$  cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

 

 

注意事项:没有检查目标服务器是否存在.ssh目录(没有第二步骤检查路径,直接copy了文件),使用scp ~/.ssh/id_rsa.pub  192.168.xxx.xxx:~/.ssh 后,执行下面命令将会遇到下面错误

 

[oracle@mylnx02 ~]$  cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
 
-bash: /home/oracle/.ssh/authorized_keys: Not a directory
 
 
 
[oracle@mylnx02 ~]$ ls -la ~/.ssh
 
-rw-r--r-- 1 oracle oinstall 411 Aug  1 11:18 /home/oracle/.ssh

 

如果遇到上述错误,应该删除rm -rf ~/.ssh ,然后按照上述步骤操作,即可解决问题。

 

 

 

 

4: 测试验证结果

 

[oracle@mylnx02 ~]$ ssh 192.168.7.xxx  free -m
             total       used       free     shared    buffers     cached
Mem:         32237      32072        165          0        137      11493
-/+ buffers/cache:      20441      11796
Swap:        12287          0      12287
[oracle@mylnx02 ~]$ ssh 192.168.7.222  date
Thu Aug  2 23:47:07 CST 2018

 

 

参考资料:

https://docs.oracle.com/cd/E56344_01/html/E54075/ssh-keygen-1.html

https://en.wikipedia.org/wiki/Ssh-keygen

猜你喜欢

转载自www.cnblogs.com/jinanxiaolaohu/p/12321635.html