ssh-keygen的学习总结

ssh-keygen介绍html

 

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

 

    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.shell

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).安全

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

 

  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 证书转换公钥。session

 

一般,但愿将 SSH RSA DSA 验证结合使用的每一个用户应运行一次此实用程序,以便在 $HOME/.ssh/identity$HOME/.ssh/id_dsa  $HOME/.ssh/id_rsa 中建立验证密钥。系统管理员还能够使用此实用程序生成主机密钥。oracle

 

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

 

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

 

对于 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 oracle@mylnx01.xxx.com

 

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

 

 

 

 

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

 

 

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

 

[oracle@mylnx01 ~]$ scp ~/.ssh/id_rsa.pub 192.168.xxx.xxx:~/.ssh 
 
oracle@192.168.xxx.xxx'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

相关文章
相关标签/搜索