SSH免密登陆原理及实现

SSH免密登录配置

一、SSH简介

产生场景

对于需要远程管理其它机器,一般使用远程桌面或者telnet。linux一般只能是telnet。但是telnet的缺点是通信不加密,存在不安全因素,只适合内网访问。为解决这个问题,推出了通信加密通信协议,即SSH(Secure Shell)。使用非对称加密方式,传输内容使用rsa或者dsa加密,可以避免网络窃听。

算法分类

SSH(Secure Shell)是一种通信加密协议,加密算法包括:RSA、DSA等。

  • RSA:非对称加密算法,其安全性基于极其困难的大整数的分解(两个素数的乘积);
  • DSA:也是非对称加密算法,其安全性基于整数有限域离散对数难题;

原理与安全性

RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。

有点要注意,RSA 的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA 就一定需要作大数分解。不过也不必太过担心,RSA 从诞生以来,经历了各种攻击,至今未被完全攻破(依靠暴力破解,小于1024位密钥长度的 RSA 有被攻破的记录,但未从算法上被攻破)

用途:

DSA 只能用于数字签名,而无法用于加密(某些扩展可以支持加密);RSA 即可作为数字签名,也可以作为加密算法。不过作为加密使用的 RSA 有着随密钥长度增加,性能急剧下降的问题。

性能:

相同密钥长度下,DSA 做签名时速度更快,但做签名验证时速度较慢,一般情况验证签名的次数多于签名的次数。

相同密钥长度下,DSA (在扩展支持下)解密密文更快,而加密更慢;RSA 正好反过来,一般来说解密次数多于加密次数。不过由于非对称加密算法的先天性能问题,两者都不是加密的好选择。

二、SSH免密登陆原理

图解,server A免登录到server B: 1.在A上生成公钥私钥。

2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了)

3.Server A向Server B发送一个连接请求。

4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。

5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。

总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。

三、主机间建立信任关系,免密码登录

配置ssh免密码登录(三个节点master、slave1、slave2)

1. 主节点配置:

生成密钥

master机器的宿主目录下执行命令生成密钥

ssh-keygen -t rsa

或

ssh-keygen -t rsa -P ''

-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车

(使用rsa加密方式生成密钥)回车后,会提示三次输入信息,我们直接回车即可。

将会在家目录下的隐藏目录/.ssh下生成文件:

id_rsa.pub         //公钥
id_rsa             //密钥

追加公钥

在master机器上,将id_rsa.pub的内容写入authorized_keys文件中

cat id_rsa.pub >> authorized_keys

2. 从节点配置:

生成密钥

以 master 同样的方式, slave1, slav2 生产密钥。

3. 将次节点的公钥发送到主节点

在slave1机器上,将id_rsa.pub复制到master机器的/.ssh目录下,并重新命名位 id_rsa.pub.slave1:

scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/id_rsa.pub.slave1

复制文件的时候,由于还没有免密码登录的,所以要输入密码

在slave2机器上,将id_rsa.pub复制到master机器的/.ssh目录下,并重新命名位id_rsa.pub.slave2 :

scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/id_rsa.pub.slave2

复制文件的时候,由于还没有免密码登录的,所以要输入密码

4、追加次节点服务器的公钥至 authorized_keys 文件中

在master机器上,在/.ssh目录下将看到从slave1、slave2发送过来的文件:

id_rsa.pub.slave1
id_rsa.pub.slave2

将这两个公钥内容追加写入到master机器/.ssh目录下的authorized_keys中:

5、确认公钥内容

在master机器上,查看authorized_keys文件内容,确认包含slave1、slave2机器的两个公钥内容:

cat authorized_keys

6、发送authorized_keys

master机器上,将authorized_keys发送到slave1、slave2机器的/.ssh目录下:

scp authorized_keys hadoop@slave1:/home/hadoop/.ssh/
scp authorized_keys hadoop@slave2:/home/hadoop/.ssh/

复制文件的时候,由于还没有免密码登录的,所以要输入密码

7、修改authorized_keys文件权限

分别在master、slave1、slave2机器上执行,对auhorized_keys进行权限修改,否则将无法实现免密码登录:

chmod 600 authorized_keys

authorized_keys的权限要是600。文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,数字签名也不支持。

8、SSH登陆测试

在master机器上,从master机器通过ssh登录到slave1,第一次需要密码,退出后以后登录就不需要密码了,其他机器类似操作:

//登陆slave1
ssh slave1

//登陆后退出
exit

//重新登陆
ssh slave1 即可直接登录

9.失败原因,有可能是以下原因:

1、权限问题

.ssh目录,以及/home/当前用户 需要700权限,参考以下操作调整
sudo chmod 700 ~/.ssh
sudo chmod 700 /home/当前用户
.ssh目录下的authorized_keys文件需要600或644权限,参考以下操作调整
sudo chmod 600 ~/.ssh/authorized_keys

2、StrictModes问题

编辑
sudo vi /etc/ssh/sshd_config
找到
#StrictModes yes
改成
StrictModes no 
如果还不行,可以用ssh -vvv 目标机器ip 查看详情,根据输出内容具体问题具体分析了

ssh -v debug

总结:

  • authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
  • id_rsa : 生成的私钥文件
  • id_rsa.pub : 生成的公钥文件
  • know_hosts : 已知的主机公钥清单

如果希望ssh公钥生效需满足至少下面两个条件:

  • .ssh目录的权限必须是700
  • .ssh/authorized_keys文件权限必须是600

查看ssh的登录日志

less /var/log/secure

转载于:https://my.oschina.net/u/3683692/blog/3027053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值