设置ssh免密登录,附原理说明

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

ssh登录有两种方式
一种是输入对应用户的密码
一种是让其他用户保存自己的公钥,采用数据加密解密的方式进行验证。
设置免密登录就是采用第二种方式,保存公钥时输入一次密码,以后登录时会跳过输入密码的过程。
保存公钥不仅用于无密登录的场景,启动某些软件时有可能会需要多次输入密码,保存自己的公钥就可以解决这个问题,会跳过密码输入过程。

    用户A想登录用户B,若B已有A的公钥,其过程:
1、A发送请求给B,B根据用户名和ip到authorized_keys文件中寻找相应的公钥,之后用该公钥加密传输一段字符串给A
2、A拿到字符串后用私钥解密后,经过md5加密传给B
3、B接收后与经md5加密的原字符串对比,相同则允许登录,否则不允许。


密钥对的说明
公钥和私钥是成对的,它们互相解密,其区别在于公开的是公钥,仅自己拥有的是私钥。
数据签名使用的是发送方的密钥对,任何接受方都可以用公钥解密,验证数据的正确性,保证了数据发送方的数据安全性。
数据加密使用的是接受方的密钥对,任何知道接受方公钥的都可以向接受方发送消息,但是只有拥有私钥的才能解密出来,保证了数据接受方的数据安全性。


一、生成公私钥对

#密钥对采用rsa方式加密,使用密钥对的密码为空,在各个用户的家目录下生成密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

在这里插入图片描述
----指令参数说明
-t rsa指定加密方式,可选rsa、dsa、ecdsa等
-f ~/.ssh/id_rsa指定生成的文件夹,这里 ~指定所有用户的家目录,也可以指定部分用户的家目录。若某个用户没有生成自己的公私钥文件夹,则它无法免密登录他人,也无法被免密登录。

----所生成的文件
id_rsa是自己的私钥
id_rsa.pub是自己的公钥文件
known_hosts是保存以往连接过的用户的公钥信息,主机若检查到此次连接所对应的公钥与上次不同,则会反馈提醒信息给用户。
另外,别人给予的公钥集合也会存在这个文件夹,以authorized_keys文件保存,该文件必须要有600以上的权限才可起作用(即对本用户可读写),顺带一提.ssh文件夹需要有700的权限(即对本用户可读、写、执行)。

authorized_keys即授权公钥,是别人连接自己时,需要查询的,没有则不给连。
known_hosts即已知用户,是连接别人时会检查的,检查到没有相关信息或者公钥与上次的不对应,会提醒用户是否继续连接,若继续则需要输入目标用户密码,之后目标用户会返回公钥到此文件中。

二、复制公钥给需要登录本机器的用户
这里使用ssh-copy-id命令,可将本用户的公钥追加到目标用户的authorized_keys文件中,若目标用户没有此文件则会生成文件夹与文件,同时此命令也会自行赋予文件相应权限。

下面以root用户免密登录自己、本地用户的免密登录、登录远程用户为例来介绍
root用户免密登录自己
在给予公钥之前,我执行启用与关闭dfs(需安装hadoop)的命令会多次要求我输入密码,如图
在这里插入图片描述

#参数为主机ip默认就是对应root用户
ssh-copy-id hadoop1

此时,我关闭再次执行关闭,会发现无需密码了
在这里插入图片描述
本地用户的免密登录
登录本地的其他用户可以用su命令,root用户登录其他用户无需输入密码,而其他用户之间,其他用户登录root用户需要密码。比方说我本地已有root、h1、h2三个用户(useradd命令创建用户,passwd命令给某用户密码),则它们之间互相登录情况如图
在这里插入图片描述
若我在h1用户下,复制自己的公钥给其他两个本地用户

ssh-copy-id root@localhost
ssh-copy-id h2@localhost

之后在h1用户下就可以用ssh命令无密码的登录其他用户

ssh root@localhost  #h1用户登录本机root
su h1 #返回h1用户
ssh h2@localhost  #h1用户登录本机h2

远程登录其他机器
我在这里准备了两台主机,并在一台机器的/etc/hosts文件内添加了两机器的主机ip、主机名
在这里插入图片描述
在另一台主机上建立一个新用户gg并赋密码
在这里插入图片描述
在hadoop1主机的root用户下,执行给予公钥命令(因为我已经在/etc/hosts里添加ip与对应名称,所以这里的参数可以是名称而非ip)

#把公钥给hadoop2下的root用户
ssh-copy-id hadoop2
#把公钥给hadoop2下的gg用户
ssh-copy-id gg@hadoop2

在这里插入图片描述
试着用ssh命令登录,发现可无密登录
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值