关于ssh私钥和公钥的一些问题

Linux IT敢客 2年前 (2017-08-23) 10127次浏览 已收录 1个评论 扫描二维码

    在 linux 系统,用到 ssh 私钥和公钥的地方非常多,一是方便无密码操作的便利;二是方便批量脚本的执行,比如批量部署,批量检查服务器等等。ssh 公钥在运维简直是不可缺失的一部分。


    一、首先,创建私钥和公钥
简单一点,拿 rsa 方式的加密来看。
输入命令 ssh-keygen
然后三次回车。

amber@JYKJ:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/amber/.ssh/id_rsa): 
Created directory '/home/amber/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/amber/.ssh/id_rsa.
Your public key has been saved in /home/amber/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:bvnows7BZ0rhDBpRvB8C0zqMEN4MA7MoiUXkz813FqU amber@JYKJ
The key's randomart image is:
+---[RSA 2048]----+
|=*+o.       .    |
|=*B.o      o     |
|B+o* .    E      |
|o ++oo.    .     |
|  ..+o+.S o      |
|   o =.+ +       |
|  .  .* *        |
|     oo* o       |
|     .+oo .      |
+----[SHA256]-----+

这是,在用户家目录下面会有一个隐藏的.ssh 的文件夹,里面会有对应的私钥 id_rsa 和公钥 id_rsa_pub 文件,里面两个文件 authorized_keys 是存放其他用户免密的公钥文件的地方,known_hosts 是存放曾经 ssh 过的服务器信息,第一次 ssh 会提示 yes/no。第二次不会提示,是因为服务器信息存放在 known_hosts 文件里面了。

amber@JYKJ:~$ cd .ssh/
amber@JYKJ:~/.ssh$ ll
总用量 12
drwx------ 0 amber amber 4096 8 月  23 09:57 ./
drwxrwxrwx 0 amber amber 4096 8 月  23 09:55 ../
-rw------- 1 amber amber  392 8 月  23 09:56 authorized_keys
-rw------- 1 amber amber 1675 8 月  23 09:55 id_rsa
-rw-r--r-- 1 amber amber  392 8 月  23 09:55 id_rsa.pub
-rw-r--r-- 1 amber amber  222 8 月  23 09:56 known_hosts
amber@JYKJ:~/.ssh$

二、实验免密登录
输入 ssh-copy-id zabbix@192.168.213.161
提示输入密码。

amber@JYKJ:~$ ssh-copy-id zabbix@192.168.213.161
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/amber/.ssh/id_rsa.pub"
The authenticity of host '192.168.213.161 (192.168.213.161)' can't be established.
ECDSA key fingerprint is SHA256:x7NjPoYsHNuVqoshnN5YiYcdyyRlCTz5XH9+IDCSlnE.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
zabbix@192.168.213.161's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'zabbix@192.168.213.161'"
and check to make sure that only the key(s) you wanted were added.

然后可以实验免密登录
ssh zabbix@192.168.213.161
如下所示:

amber@JYKJ:~$ ssh zabbix@192.168.213.161
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-43-Microsoft x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

39 packages can be updated.
24 updates are security updates.


Last login: Thu Jul 27 15:53:21 2017 from 192.168.213.161

表示免密登录成功。
此时,我们记录下,相应的目录权限。
zabbix 家目录权限是 755 ,.ssh 目录权限是 700,authorized_keys 和 id_rsa 权限是 600,id_rsa_pub 和 known_hosts 权限是 644.amber 的家目录是 777.


接下来,我们做一个自己登陆自己的免密验证。条件仍是
zabbix 家目录权限是 755 ,.ssh 目录权限是 700,authorized_keys 和 id_rsa 权限是 600,id_rsa_pub 和 known_hosts 权限是 644.amber 的家目录是 777.
ssh-copy-id amber@192.168.213.161   如下,提示安装成功。

amber@JYKJ:~/.ssh$ ssh-copy-id amber@192.168.213.161
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/amber/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
amber@192.168.213.161's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'amber@192.168.213.161'"
and check to make sure that only the key(s) you wanted were added.

然后,免密验证,提示如下,还是要输入密码,也就是免密失败。

amber@JYKJ:~/.ssh$ ssh amber@192.168.213.161
amber@192.168.213.161's password:

经过多方面的排查,具体不说明哪些排查面了。发现是用户 amber 的家目录权限问题导致,amber 的家目录权限是 777,将 amber 的家目录权限更改为 775 或者 755,然后再次验证。发现是可以正常免密登录成功。


总结:关于免密登录的常见问题都出现在权限问题上。记录几个关键点,用户家目录的其他者属性不要为 7,用户 755,775 都可以,然后.ssh 的目录权限是 700 或者 755 都可以,也注意其他者不要为 7 即可。然后里面的四个文件 authorized_keys 和 id_rsa 权限是 600,id_rsa_pub 和 known_hosts 权限是 644。最好不要动。由于验证场景太多,就不一一验证,有兴趣的网友可以自行验证。


IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于 ssh 私钥和公钥的一些问题
喜欢 (155)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 好东西,解决了困扰已久的问题。
    钱德隆2017-09-09 08:35 回复 Android 6.0.1 | Chrome 55.0.2883.91