写点什么

Linux 配置 SSH 免密码登录 (非 root 账号)

作者:程序员欣宸
  • 2022 年 8 月 11 日
    广东
  • 本文字数:2345 字

    阅读完需:约 8 分钟

Linux配置SSH免密码登录(非root账号)

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos


  • Linux 环境下,经常通过 SSH 从一台服务器登录到另一台服务器,并且登录身份不是 root 账号,每次都要输入密码挺麻烦的,所以今天就来实战如何配置非 root 账号的免密码登录;

实战环境

  • 本次实战环境是三台 CentOS 7.5 机器,它们的相关信息如下所示:


准备工作

  • 确认 ssh 服务已经安装并打开;

  • 打开文件**/etc/ssh/sshd_config**,确保以下配置已经添加(如果被"#"注释了就把"#"删除):


AuthorizedKeysFile      .ssh/authorized_keysPubkeyAuthentication yes
复制代码


  • 三台机器的/etc/hostname 文件中的内容分别是 node0、node1、node2;

  • 三台机器的/etc/hosts 文件尾部都添加以下三行内容(请按照自己机器的 ip 地址来填写):


192.168.119.160 node0192.168.119.161 node1192.168.119.162 node2
复制代码


  • 三台机器上都有非 root 账号,为了方便操作,这里为三台机器都创建了名为 hadoop 的账号和群组,创建命令:


groupadd hadoop && useradd -d /home/hadoop -g hadoop -m hadoop
复制代码


  • 创建完账号后记得用命令 passwd 初始化 hadoop 账号的密码;

  • 在 node0 机器上输入 ssh hadoop@node1,尝试 ssh 登录 node1,此时由于未配置免密码登录,所以控制台要求输入 node1 的密码,如下:


[hadoop@node0 ~]$ ssh hadoop@node1The authenticity of host 'node1 (192.168.119.161)' can't be established.ECDSA key fingerprint is SHA256:DJ8ZdacngzPjAszOZTpx1WudYX+u0aAUld7ZYSK9/4g.ECDSA key fingerprint is MD5:86:78:2f:c7:c2:97:7f:79:dd:b7:d0:26:fd:bf:a6:9b.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'node1,192.168.119.161' (ECDSA) to the list of known hosts.hadoop@node1's password: Last login: Thu Feb  7 18:10:40 2019 from 192.168.119.1[hadoop@node1 ~]$
复制代码


  • 准备工作已经完成,接下来开始实战免密码登录配置;

生成秘钥(三台机器都要执行)

  • hadoop 账号登录;

  • 输入 ssh-keygen -t rsa,然后一路回车,顺利生成秘钥文件,如下:


[hadoop@node0 ~]$ ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/hadoop/.ssh/id_rsa.Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.The key fingerprint is:SHA256:Ct6HIbAfypJpr/VLzxOeWX4WngQPUaSrJTguPN23Eh4 hadoop@node0The key's randomart image is:+---[RSA 2048]----+|          oo     ||         ..      ||  .      ..      ||   o  .  o.      ||  . +o..So+      || +.+o=oE+. +     ||+.o=o+*oX.o o    ||..o = oO...=     || ... o.oo.o      |+----[SHA256]-----+[hadoop@node0 ~]$
复制代码


  • 进入目录**~/.ssh/**可见如下内容:


[hadoop@node0 ~]$ cd ~/.ssh/[hadoop@node0 .ssh]$ lsid_rsa  id_rsa.pub  known_hosts
复制代码

配置秘钥授权文件

  • hadoop 账号登录 node0 机器;

  • 生成一个空白文件:


touch ~/.ssh/authorized_keys
复制代码


  • 将 node0 自己的公钥放入文件 authorized_keys 中:


cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
复制代码


  • hadoop 账号登录 node1 机器,执行以下命令,即可将 node1 的公钥传输到 node0 机器,文件名为 node1.id_rsa.pub


scp ~/.ssh/id_rsa.pub hadoop@node0:~/.ssh/node1.id_rsa.pub
复制代码


  • 期间会要求输入 node0 的 hadoop 账号的密码,输入后传输完成,在 node0 的/home/hadoop/.ssh 目录下,多了个名为 node1.id_rsa.pub 的文件;

  • 在 node0 机器执行以下命令,即可将 node1.id_rsa.pub 的内容写入 authorized_keys 文件:


cat ~/.ssh/node1.id_rsa.pub >> ~/.ssh/authorized_keys
复制代码


  • 此时 authorized_keys 文件中已经有了 node0 和 node1 的公钥;

  • hadoop 账号登录 node2 机器,执行以下命令,即可将 node2 的公钥传输到 node0 机器,文件名为 node2.id_rsa.pub


scp ~/.ssh/id_rsa.pub hadoop@node0:~/.ssh/node2.id_rsa.pub
复制代码


  • 期间会要求输入 node0 的 hadoop 账号的密码,输入后传输完成,在 node0 的/home/hadoop/.ssh 目录下,多了个名为 node2.id_rsa.pub 的文件;

  • 在 node0 机器执行以下命令,即可将 node2.id_rsa.pub 的内容写入 authorized_keys 文件:


cat ~/.ssh/node2.id_rsa.pub >> ~/.ssh/authorized_keys
复制代码


  • 此时 authorized_keys 文件中已经有了 node0、node1、node2 的公钥;

同步秘钥授权文件

  • hadoop 账号登录 node0 机器,执行以下命令将秘钥授权文件同步到 node1 机器:


scp ~/.ssh/authorized_keys hadoop@node1:~/.ssh/
复制代码


  • hadoop 账号登录 node0 机器,执行以下命令将秘钥授权文件同步到 node2 机器:


scp ~/.ssh/authorized_keys hadoop@node2:~/.ssh/
复制代码


  • 至此,秘钥授权文件已经同步到所有机器,如果前面的所有操作用的是 root 账号,此时已经可以免密码登录成功了,但是今天我们用的不是 root 账号,此时在 node0 输入命令 ssh hadoop@node1,却发现依然要求输入 node1 的 hadoop 账号的密码,这是因为文件和文件夹权限的问题导致的,接下来解决权限问题;

调整文件夹和文件的权限(三台机器都要执行)

  • 先调整文件夹**~/.ssh**的权限:


chmod 700  ~/.ssh
复制代码


  • 再调整文件**~/.ssh/authorized_keys**的权限:


chmod 600  ~/.ssh/authorized_keys
复制代码


  • 至此,非 root 账号的 SSH 免密码登录配置已经完成,在 node0 输入命令 ssh hadoop@node1 试试,如下,顺利登录,不需要输入密码:


[hadoop@node0 ~]$ ssh hadoop@node1Last login: Fri Feb  8 00:36:57 2019 from 192.168.119.1[hadoop@node1 ~]$
复制代码


  • 再去 node1、node2 机器上试试 SSH 登录其他机器,发现也能免密码登录;

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

发布于: 刚刚阅读数: 6
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
Linux配置SSH免密码登录(非root账号)_SSH_程序员欣宸_InfoQ写作社区