Linux免密登陆配置过程及原理详解

Linux免密登陆配置过程及原理详解

原理:
非对称加密算法

原理详解请参考:阮一峰的网络日志

简单描述:根据非对称加蜜原理,要使主机A可以免密登录至主机B,那么需要将主机A的公钥放在主机B上,在登录时,主机A用自己的私钥加密登录信息,主机B用保存的A的公钥解锁成功后即可认为是合法登录。

配置步骤:

  • 生成主机A的公私钥。

  • 将主机A的公钥放在主机B上。

一、生成主机A 的公私钥(该部分操作均在主机A 上):

ssh-keygen -t rsa -P ''

无需输入内容,直接空格招呼,此时主机A会生成公私钥并将其放在~/.ssh目录下。
id_rsa 私钥
id_rsa.pub 公钥

二、将主机A的公钥放在主机B上(接下来的操作均在主机B上):

将主机A的公钥传输保存在主机B的/root/.ssh/authorized_keys文件中(没有该文件就新建)。

**注意:你将主机A的公钥放在主机B的哪个用户目录下,就只能以这个用户身份免密登陆。**此例用的是root用户,可以根据实际需求选择用户。

将authorized_keys文件权限改为600

chmod 600 ~/.ssh/authorized_keys

完成权限更改后,就配置好主机A到主机B的免密登陆了

如果想要相互免密登陆的话,两主机反向操作即可。

三、知识拓展

我们希望免密登陆哪台机器哪个账户,就把自己的公钥交给谁。因为拥有你公钥的服务器“只认公钥不认人”,所以我们一定要保管好自己的私钥。

在生成公私钥的过程中,直接在服务器中执行ssh-keygen命令,会进入交互模式,并等待用户输入生成秘钥文件的存放路径。在不指定其他路径时,系统默认会存放在“当前用户家目录的.ssh目录中
因为当前系统账户为root。所以,默认生成秘钥路径是:/root/.ssh/id_rsa。
如果在存放路径下存在同名文件,会提示你是否覆盖,在没有搞清楚是谁的秘钥之前,最好不要覆盖,否则可能会导致私钥丢失。
确认秘钥生成路径后,会提示Enter passphrase输入密码,安全起见,可以设置密码,在每次使用秘钥的时候,都会提示我们输入私钥密码。直接回车就是不设置密码。

以下我们记录下实际操作中会遇到的问题.
目的:实现从192.168.245.129免密登陆到192.168.245.127
我们已经在129上生成了秘钥,现在需要把秘钥传输到127上,使用ssh-copy-id命令。

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.245.127

通过该命令可以将129的公钥交给同一局域网的127的root账号

使用 -i 指明要传输的公钥,然后指明账户和IP地址,进行公钥传输,这时候需要我们输入一次密码。

tips:
多数情况下,公司的sshd服务不会使用默认端口22,所以,在使用ssh-copy-id命令时可能需要指定端口号,但在centos 6和7中sshd端口指定命令略有不同,假设指定端口为10022:

centos6:ssh-copy-id -i /root/.ssh/id_rsa.pub “root@192.168.245.127 -p 10022”
centos7:ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.245.127 -p 10022

以上两种命令格式细微差别在于centos7不用加引号!

命令执行成功够会提示我们尝试进行登录验证,从129登录127,会提示输入秘钥管理密码,随后即可成功登录。

我们知道传输到127的秘钥放在root账户的/root/.ssh/authorized_keys中:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDN7f5K8PdB3LDbOsSEFgVxWAIRpyrVsZrstITZNQXQ9mEJBrT4QrZz6QoWOD5G79gI30Qh69aNIDkbvz8h4iBH27MV4IwIJvGHe8ImkGsw8QxEm883BzS97D6pi8FMHXm    3s/GtQxbptOiX27WIwVIAUzgjDri288D3Fv7+ZVVL/E/vEJIsFH467/DQ8O9+rtOd8JmYWq//qm61yriABukmDPmbJi/YLFGUNGnWeaZtQu/xgBypNpS54nPZrCHywcDYWLUx7ZrY7OkdIrIylHSGqxP16aawD2U4lcUJmg    QBsLD95KL3iwFl+r/8kIFhVbUjncuDYTdtuJ2SaUD91Ezf root@flyer

注意/root/.ssh/authorized_keys的权限需要改成600,其中可以放置不同服务器的秘钥,除了使用ssh-copy-id命令外,你也可以使用scp或者直接粘贴复制,但是粘贴复制容易出错,例如格式问题或者权限问题。

Q:已经将本机公钥推送给对方的某账户,但是仍不能免密登陆目标主机账户

可能原因:
1、SSH服务端不支持基于公钥认证或者修改了默认的公钥认证文件
服务端可以禁止使用公钥认证的机制,相关配置文件:sshd_config
配置项:PubkeyAuthentication。该参数默认是YES,表示支持公钥认证。
服务端默认使用authorized_keys作为存储用户公钥的文件,可以使用AuthorizedKeysFile配置项指定其他文件作为认证文件。

2、ssh服务端相关目录或者文件权限过大
服务端用户家目录.ssh目录权限正常为700
在这里插入图片描述
/root/.ssh/authorized_keys文件权限默认600
在这里插入图片描述

3、或者说你的秘钥没有放在对应的账户下,或者说连接错了账户

你的host B的B账户中直接ssh hostA,默认是去连接host A的B账户!
如果你把host B的B账户公钥放在了hostA中的A 账户下,远程登录时却没有指定A账户,自然不会免密登录成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值