zoukankan      html  css  js  c++  java
  • Linux下实现普通用户免密登录并执行root权限

    需求:服务器的root和密码登录都禁用,只开放普通用户登录,这时需要给普通用户配置秘钥文件,实现无密码登录

     需要注意的是使用什么用户,就把秘钥文件拷入到该用户的家目录下,如果是root用户,就直接拷贝到/root/.ssh/下(本次测试是使用普通用户oper测试的)

      1) .ssh目录的权限必须是700  

      2) .ssh/authorized_keys文件权限必须是600

    测试机器:

      host1:192.168.0.131

      host2:192.168.0.132

    一、在新机器生成秘钥:

    [root@host1 .ssh]# ssh-keygen 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:O9C8LWfjT44gIJR+URWH3FFJhsgqMU8VmaDDZAGWR7k root@host1
    The key's randomart image is:
    +---[RSA 2048]----+
    |  o+=oo*=Oo=+.   |
    | ..==o. B.o..    |
    |  o.=* .         |
    | o  Eooo         |
    |  o o.. S        |
    |   o . . +       |
    |      . * = .    |
    |       . B =     |
    |          o.o    |
    +----[SHA256]-----+
    [root@host1 .ssh]# ls
    id_rsa  id_rsa.pub  known_hosts

    二、将id_rsa.pub拷入需要登录的服务器的用户家目录下的.ssh/authorized_keys中(即192.168.0.132下的/home/oper/.ssh/authorized_keys)

      以下三种方法任选其一即可

      2.1:通过ssh-copy-id的方式

    [root@host2 oper]# mkdir /home/oper/.ssh
    [root@host2 oper]# chown oper:oper .ssh/
    [root@host2 oper]# chmod 700 .ssh
    [root@host2 oper]# ls -la
    总用量 20
    drwx------. 3 oper oper 111 4月  23 12:58 .
    drwxr-xr-x. 5 root root  43 4月  23 10:18 ..
    -rw-------. 1 oper oper 104 4月  23 13:01 .bash_history
    -rw-r--r--. 1 oper oper  18 8月   3 2017 .bash_logout
    -rw-r--r--. 1 oper oper 193 8月   3 2017 .bash_profile
    -rw-r--r--. 1 oper oper 231 8月   3 2017 .bashrc
    drwx------. 2 oper oper  29 4月  23 14:32 .ssh
    
    [root@host1 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub oper@192.168.0.132
    oper@192.168.0.132's password:
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh 'oper@192.168.0.132'"
    and check to make sure that only the key(s) you wanted were added.
    #登录测试 [root@host1 .
    ssh]# ssh oper@192.168.0.132 Last failed login: Mon Apr 23 14:32:40 CST 2018 from 192.168.0.131 on ssh:notty There was 1 failed login attempt since the last successful login. Last login: Mon Apr 23 14:21:57 2018 from 192.168.0.131 [oper@host2 ~]$

      2.2:通过scp将内容写到对方的文件中

    [root@host1 .ssh]# scp -p ~/.ssh/id_rsa.pub oper@192.168.0.132:/home/oper/.ssh/authorized_keys
    oper@192.168.0.132's password: 
    id_rsa.pub     
    #登录测试 100% 392 16.6KB/s 00:00 [root@host1 .ssh]# ssh oper@192.168.0.132 Last login: Mon Apr 23 14:35:06 2018 from 192.168.0.131 [oper@host2 ~]$

      2.3:通过ssh命令写入,此方式可写成脚本,然后批量写入主机

      此方式也可直接把/root/.ssh/id_rsa.pub的内容直接复制粘贴到host2下/home/oper/.ssh/authorized_keys中

    [root@host1 .ssh]# ssh oper@192.168.0.132 "echo `cat /root/.ssh/id_rsa.pub` >> /home/oper/.ssh/authorized_keys "
    oper@192.168.0.132's password: 
    [root@host1 .ssh]# ssh oper@192.168.0.132
    oper@192.168.0.132's password: 
    
    [root@host2 .ssh]# pwd
    /home/oper/.ssh
    [root@host2 .ssh]# ll
    总用量 4
    -rw-rw-r--. 1 oper oper 392 4月  23 14:43 authorized_keys
    [root@host2 .ssh]# chmod 600 authorized_keys 
    [root@host2 .ssh]# ll
    总用量 4
    -rw-------. 1 oper oper 392 4月  23 14:43 authorized_keys
    #登录测试
    [root@host1 .ssh]# ssh oper@192.168.0.132
    Last login: Mon Apr 23 14:40:54 2018 from 192.168.0.131
    [oper@host2 ~]$ 
    
    出现需要密码登录是因为host2的authorized_keys权限没有设置为600;把权限设置为600后,再执行 ssh oper@192.168.0.132就可以了,如果之前有权限是600的authorized_keys;则可直接登录

    PS:如果普通用户需要切换到root用户且无需输入密码,则在root用户模式下执行命令:visudo 

    [root@host2 ~]# visudo  #最后一行加入
    Cmnd_Alias SU = /bin/su
    oper ALL = (root)  NOPASSWD: SU
    :wq
    [root@host2 ~]# su - oper
    #登录测试 [oper@host2
    ~]$ sudo su #最好使用sudo su - 完全切换,su会加载不出来环境变量 [root@host2 oper]#
    附:文件说明
         ~/.ssh/identity
                 该用户默认的 RSA1 身份认证私钥(SSH-1)。此文件的权限应当至少限制为"600"。
                 生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
                 ssh(1) 将在登录的时候读取这个文件。
         ~/.ssh/identity.pub
                 该用户默认的 RSA1 身份认证公钥(SSH-1)。此文件无需保密。
                 此文件的内容应该添加到所有 RSA1 目标主机的 ~/.ssh/authorized_keys 文件中。
         ~/.ssh/id_dsa
                 该用户默认的 DSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
                 生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
                 ssh(1) 将在登录的时候读取这个文件。
         ~/.ssh/id_dsa.pub
                 该用户默认的 DSA 身份认证公钥(SSH-2)。此文件无需保密。
                 此文件的内容应该添加到所有 DSA 目标主机的 ~/.ssh/authorized_keys 文件中。
         ~/.ssh/id_rsa
                 该用户默认的 RSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
                 生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
                 ssh(1) 将在登录的时候读取这个文件。
         ~/.ssh/id_rsa.pub
                 该用户默认的 RSA 身份认证公钥(SSH-2)。此文件无需保密。
                 此文件的内容应该添加到所有 RSA 目标主机的 ~/.ssh/authorized_keys 文件中。
         /etc/ssh/moduli
                 包含用于 DH-GEX 的 Diffie-Hellman groups 。文件的格式在 moduli(5) 手册页中描述。
  • 相关阅读:
    [pixhawk笔记]8-半物理仿真环境
    Python超参数自动搜索模块GridSearchCV上手
    Oriented Response Networks 阅读笔记(一)
    聚类算法评价指标学习笔记
    基于sklearn的常用分类任务指标Python实现
    使用h5py库读写超过内存的大数据
    基于MXNet使用自己的图像数据集训练网络--准备数据与撰写预处理脚本
    在Ubuntu操作系统中添加环境变量
    Jetson TK1 开发板初用体会
    一条脚本搞定OpenCV
  • 原文地址:https://www.cnblogs.com/01-single/p/8919254.html
Copyright © 2011-2022 走看看