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_rsa和id_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
ssh-keygen的学习总结的更多相关文章
- 批量SSH key-gen无密码登陆认证脚本
SSH key-gen无密码登录认证脚本 使用为了让linux之间使用ssh不需要密码,可以采用了数字签名RSA或者DSA来完成.主要使用ssh-key-gen实现. 通过 ssh-key-gen 来 ...
- 批量SSH key-gen无密码登陆认证脚本 附件脚本
# 批量实现SSH无密码登陆认证脚本 ## 问题背景 使用为了让linux之间使用ssh不需要密码,可以采用了数字签名RSA或者DSA来完成.主要使用ssh-key-gen实现. 1.通过 ssh-k ...
- ssh端口转发学习笔记
ssh端口转发学习笔记 ssh命令参数介绍 -C 压缩数据传输 -f 将 ssh 转到后台运行,即认证之后,ssh 自动以后台运行.不在输出信息 -n 将 stdio 重定向到 /dev/null,与 ...
- Linux登录验证机制、SSH Bruteforce Login学习
相关学习资料 http://files.cnblogs.com/LittleHann/linux%E4%B8%AD%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E8%AE% ...
- SSH框架入门学习之二(spring)
Spring也是一个开源框架,我在学习Spring的时候,认为最重要的几点是:IOC(控制反转).AOP(面向切面)和容器概念. 详细的教程还请大家去看网上的视频,这里贴一个小Demo以供学习. (前 ...
- ssh相关原理学习与常见错误总结
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- ssh keygen命令实现免密码通信(git库获取操作权限:开发人员添加到git库中,获取操作权限)
先看两个机器实现免密码登陆通讯: 假设 A 为客户机器,B为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa 做法: 1.登录A机器 2.s ...
- iOS开发之git学习
本人是参考廖雪峰的git学习的.他写的非常详细,我在这里就是把我学习中的总结以及碰到的坑写出来. /* 初始化git仓库:git init */ /* 添加文件到git仓库 */ 分两步: 第一步:追 ...
- 2019.3.6 Github学习 &Git学习
Github学习 1.使用Github 1.1 目的 借助github托管项目代码 1.2 基本概念 仓库(Repository) 仓库的意思是:即你的项目,你想在Github上开源一个项目,那就必须 ...
- Hadoop分布式模式下SSH免密码登录
1.Hadoop中为什么要配置免密码登录 最近在学习Hadoop,在集群中,Hadoop控制脚本依赖SSH来执行针对整个集群的操作.例如,某个脚本能够终止并重启集群中的所有守护进程.所以,需要安装SS ...
随机推荐
- mysql 开发基础系列21 事务控制和锁定语句(下)
1. 隐含的执行unlock tables 如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示: 会话1 会话2 ...
- SpringBoot2.0源码分析(四):spring-data-jpa分析
SpringBoot具体整合rabbitMQ可参考:SpringBoot2.0应用(四):SpringBoot2.0之spring-data-jpa JpaRepositories自动注入 当项目中存 ...
- Ansible批量更新远程主机用户密码 (包括Ansible批量做ssh互信)
按照集团运维信息安全制度, 需要每个一段时间对线上服务器密码进行一次变更,通过shell脚本部署比较繁琐,所以决定采用ansible脚本对远程主机root密码进行批量重置,该脚本已经在稳定运行在正式环 ...
- python模块之pickle、shelve、json
一 什么是序列化 序列化指的是将内存中的数据结构转化为一种中间格式,并存储到硬盘上. (反序列化:将硬盘上存储的中间格式数据再还原为内存中的数据结构) 二 为什么要序列化 持久保持状态 需知一个软件/ ...
- Linux之定时任务Crond使用
Linux之定时任务Crond使用 一.用法 crond服务是linux系统自带的服务,是不需要手动安装的: crond服务是一种守护进程: Linux中的用户使用contab命令来配置corn任务: ...
- Js中的提升
Js的执行并不是由上向下一行一行顺序下来的,一个例子如下: a = 2; var a ; console.log(a) 输出的是2,这区别于别的语言. 再一个例子: console.log(a); / ...
- 第一册:lesson fifty one.
原文: A pleasant climate. A:Where do you come frome? B:I come from Greece. A:What's the climate like i ...
- NGUI 做局部2d卷轴
网上找到的都是做整个背景的卷轴动画,通常是改变纹理位置或者背景图片的x坐标 没有提到在UI界面里某个部分做卷轴动画,找了很久,才发现NGUI的Panel里的Clipping属性可以裁剪Panel的大小 ...
- java时间类Date、Calendar及用法
对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...