美文网首页
Linux配置SSH免密码登录(非root账号)

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

作者: 汤海怪 | 来源:发表于2019-12-19 15:16 被阅读0次

    Linux环境下,经常通过SSH从一台服务器登录到另一台服务器,并且登录身份不是root账号,每次都要输入密码挺麻烦的,所以今天实战一下如何配置非root账号的免密码登录;
    如果想要看到图片配置,可以查看我其他的文章

    实战环境

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

    IP 地址 主机名
    192.168.50.160 node0
    192.168.50.161 node1
    192.168.50.162 node2

    准备工作

    • 1.确认ssh服务已经安装并打开;
      2.打开文件/etc/ssh/sshd_config,确保以下配置已经添加(如果被"#“注释了就把”#"删除):
    AuthorizedKeysFile      .ssh/authorized_keys
    PubkeyAuthentication yes
    
    • 3.三台机器的/etc/hostname文件中的内容分别是node0、node1、node2;
      4.三台机器的/etc/hosts文件尾部都添加以下三行内容(请按照自己机器的ip地址来填写):
    192.168.50.160 node0
    192.168.50.161 node1
    192.168.50.162 node2
    
    • 5.三台机器上都有非root账号,为了方便操作,这里为三台机器都创建了名为hadoop的账号和群组,创建命令
    groupadd hadoop && useradd -d /home/hadoop -g hadoop -m hadoop
    

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

      1. 在node0机器上输入ssh hadoop@node1,尝试ssh登录node1,此时由于未配置免密码登录,所以控制台要求输入node1的密码,如下:
    [hadoop@node0 ~]$ ssh hadoop@node1
    The authenticity of host 'node1 (192.168.50.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)? yes
    Warning: Permanently added 'node1,192.168.50.161' (ECDSA) to the list of known hosts.
    hadoop@node1's password: 
    Last login: Thu Feb  7 18:10:40 2019 from 192.168.50.1
    [hadoop@node1 ~]$
    
    

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

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

    • 1.以hadoop账号登录;
      2.输入ssh-keygen -t rsa,然后一路回车,顺利生成秘钥文件,如下:
    [hadoop@node0 ~]$ ssh-keygen -t rsa
    Generating 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@node0
    The 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]$ ls
    id_rsa  id_rsa.pub  known_hosts
    

    配置秘钥授权文件

    • 1.以hadoop账号登录node0机器;
      2.生成一个空白文件:
    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的文件;

      1. 在node0机器执行以下命令,即可将node1.id_rsa.pub的内容写入authorized_keys文件:
    cat ~/.ssh/node1.id_rsa.pub >> ~/.ssh/authorized_keys
    

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

      1. 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的文件;

      1. 在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免秘钥很容易因权限问题失败

    • 1.先调整文件夹~/.ssh的权限:
    chmod 700  ~/.ssh
    
    • 2.再调整文件~/.ssh/authorized_keys的权限:
    chmod 600  ~/.ssh/authorized_keys
    
    • 3.至此,非root账号的SSH免密码登录配置已经完成,在node0输入命令ssh hadoop@node1试试,如下,顺利登录,不需要输入密码:
    [hadoop@node0 ~]$ ssh hadoop@node1
    Last login: Fri Feb  8 00:36:57 2019 from 192.168.119.1
    [hadoop@node1 ~]$
    

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

    相关文章

      网友评论

          本文标题:Linux配置SSH免密码登录(非root账号)

          本文链接:https://www.haomeiwen.com/subject/jfwmnctx.html