讲解 ssh-keygen -t rsa -b 4096 命令表达的意思

实现免密登录
这条命令目的是为了本地机器ssh登录远程服务器无需输入密码
1.ssh-keygen
SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
		
从客户端来看,SSH提供两种级别的安全验证:
	
第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
	
第二种级别(基于密匙的安全验证)ssh-keygen:需要依靠密匙,你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒 。
	
ssh-keygen有很多的参数,比如这里的-t -b -C都是他的一些参数

2.-t rsa
-t即指定密钥的类型,密钥的类型有两种,一种是RSA,一种是DSA:
	
RSA:RSA加密算法是一种非对称加密算法,是由三个麻省理工的牛人弄出来的,RSA是他们三个人姓的开头首字母组合。
	
DSA:Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种。
	
为了让两个linux机器之间使用ssh不需要用户名和密码。所以采用了数字签名RSA或者DSA来完成这个操作。ssh-keygen默认使用rsa密钥,所以不加-t rsa也行,如果你想生成dsa密钥,就需要加参数-t dsa。

3.-b 4096
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。命令中的4096指的是RSA密钥长度为4096位。

DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。

这里额外补充一个知识
命令后面还可以增加-C "注释内容"
	
-C表示要提供一个新注释,用于识别这个密钥,可以是任何内容,一个用来识别的key

小结:当你创建ssh的时候:-t 表示密钥的类型 ,-b表示密钥的长度,-C 用于识别这个密钥的注释 ,这个注释你可以输入任何内容

ssh免密登陆失败原因总结(Linux)

  1. SSH公钥认证(免密码)配置
登录到本机服务器A,切换到响应的操作系统用户,执行命令,生成秘钥文件【按照提示直接回车】
ssh-keygen -t rsa
将公钥传送到对端服务器B上面【user@host为对端服务器帐号及IP】
ssh-copy-id -i ~/.ssh/id_rsa.pub  user@host
然后在本机服务器A上ssh命令验证是否免密码登录生效【user@host为对端服务器帐号及IP】
ssh user@host
  1. SSH免密码登陆的基本原理
SSH(Secure Shell)是一种通信加密协议,加密算法包括:RSA、DSA等
  1. SSH免密码失败原因定位分析
a) 服务器B上.ssh目录的权限必须是700

b) 服务器B上.authorized_keys文件权限必须是600或者644

c) 服务器B上用户家目录文件权限必须是700,比如用户名是aischang,则/home/aischang这个目录权限必须是700

如果不是700,在服务器A上查看/var/log/secure文件会报错

#原因
sshd为了安全,对属主的目录和文件权限有所要求。如果权限
不对,则ssh的免密码登陆不生效。

d) 服务器B上SELinux关闭为disabled,可以使用命令修改setenforce 0 ,查看状态的命令为getenforce或者 查看/etc/selinux/config 文件中是否是disabled

e) 有可能是StrictModes问题

编辑 vi /etc/ssh/sshd_config

找到#StrictModes yes改成StrictModes no

f) 有可能是PubkeyAuthentication问题

编辑 vi /etc/ssh/sshd_config

找到PubkeyAuthentication改成yes

一、概述
1、就是为了让两个linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作
2、模型分析
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机;
要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa
二、具体操作流程
单向登陆的操作过程(能满足上边的目的):
1、登录A机器
2、ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
3、将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys
4、大功告成,从A机器登录B机器的目标账户,不再需要密码了;(直接运行#ssh 192.168.20.60 )
双向登陆的操作过程:
1、ssh-keygen做密码验证可以使在向对方机器上ssh ,scp不用使用密码.具体方法如下:
2、两个节点都执行操作:
#ssh-keygen -t rsa
然后全部回车,采用默认值.
3、这样生成了一对密钥,存放在用户目录的~/.ssh下。
将公钥考到对方机器的用户目录下,并将其复制到~/.ssh/authorized_keys中(操作命令: #cat id_dsa.pub >> ~/.ssh/authorized_keys )。
4、设置文件和目录权限:
设置authorized_keys权限
$ chmod 600 authorized_keys
设置.ssh目录权限
$ chmod 700 -R .ssh
5、要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞

Logo

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

更多推荐