ssh-keygen的学习总结

ssh-keygen介绍

 

维基百科上关于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).

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenSSH 8.0 发布了,此版本缓解了 scp(1) 工具和协议漏洞 CVE-2019-6111,该漏洞此前我们之前报导过:知名文件传输协议 SCP 被曝存在 35 年历史的安全漏洞。 将文件从远程系统复制到本地目录时,SCP 客户端无法验证 SCP 服务器返回的对象是否与请求的东西一致,这使得攻击者可以使用恶意服务器控制的内容创建或破坏本地文件。 OpenSSH 8.0 的缓解措施添加了客户端检查,查看从服务器发送的文件名与命令行请求是否匹配。 SCP 协议已经过时,不灵活且不易修复,OpenSSH 官方建议使用更现代的协议进行文件传输,如 sftp 和 rsync。 此版本新特性包括: ssh(1)、ssh-agent(1)、ssh-add(1):PKCS#11 token 中添加对 ECDSA 密钥的支持。 ssh(1)、sshd(8):基于 Streamlined NTRU Prime 4591^761 和 X25519 的组合,添加实验性量子计算抗性密钥交换方法。 ssh-keygen(1):将默认 RSA 密钥大小增加到 3072 位。 ssh(1):允许“PKCS11Provider = none”覆盖 ssh_config 中 PKCS11Provider 指令的后续实例。 ssh(1):提示是否录制新主机密钥时,输入密钥指纹作为“yes”。 ssh-keygen(1):在单个命令行调用上签名多个证书时,允许自动递增证书序列号。 scp(1)、sftp(1):接受 -J 选项作为 scp 和 sftp 命令行上 ProxyJump 的别名。 ssh-agent(1)、ssh-pkcs11-helper(8)、ssh-add(1):接受“-v”命令行标志以增加输出的详细程度;将详细标志传递给子进程,例如从 ssh-agent 启动的 ssh-pkcs11-helper。 ssh-add(1):添加“-T”选项以允许通过执行签名和验证来测试代理中的密钥是否可用。 sshd(8):在 PAM 环境中暴露 $SSH_CONNECTION。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值