版权声明:本文为 CSDN 博主「艳阳如一」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/SXY16044314/article/details/90605069


# 需求

为了保证一台 Linux 主机的安全,所以我们每个主机登录的时候一般我们都设置账号密码登录。但是很多时候为了操作方便,我们都通过设置 SSH 免密码登录。
在这里我对本地机器 Cloud10 和目标机器 Cloud11、Cloud12 进行免密登录

# 大致的三步

1. 本地机器生成公私钥
2. 上传公钥到目标机器
3. 测试免密登录

# 具体操作

  1. 准备工作

    • 使用 root 权限分别修改每台机器的 hosts,添加每台机器所对应的 IP 和主机名(我这里分布式集群是 3 台机器组成的,所以配置 3 台,习惯将自己的 ip 和主机名放在第一行)

      sudo vim /etc/hosts
    • 删除文件里内容后添加如下内容

      1.png

    • 查看本地机器的隐藏文件夹 .ssh 是否存在

      ll -a

      2.png

  2. 在本地机器用 ssh-keygen 生成一个公私钥对

    • 进入.ssh 目录 cd .ssh

    • 发起公钥请求 ssh-keygen -t rsa

      在.ssh/ 目录下,会新生成两个文件:id_rsa.pub 和 id_rsa

      3.png

  3. 上传公钥到目标机器

    • 上传:

      ssh-copy-id hduser@192.168.157.146
      # or ssh-copy-id hduser@Cloud12

      注意:(@前边是接受公钥机器的用户名,后边是接受放的 ip,因为配置了映射所以 ip 可以用主机名代替)

      4.png

      5.png

    • 查看远程从节点主机上是否接收到 authorized_keys 文件

      6.png

      7.png

    • 这个时候 Cloud10 的公钥文件内容会追加写入到 Cloud11 的 .ssh/authorized_keys

      文件中查看 Cloud11 下的 authorized_keys 文件与 Cloud10 下的 id_rsa.pub 中内容是一样的,如下图所示

      8.png

      9.png

    • (实测不用)重启 SSH 服务命令使其生效:(3 台机器都要重启)

      sudo service sshd restart

    注意:
    .ssh 目录的权限为 700,其下文件 authorized_keys 和私钥的权限为 600。否则会因为权限问题导致无法免密码登录。我们可以看到登陆后会有 known_hosts 文件生成。

     ```bash
     chmod -R 700 .ssh/
     sudo chmod 600 .ssh/authorized_keys
     ```
    
  4. 测试免密登录
    使用 IP 免密登录(用户名相同时,ssh + 主机名;如果不同,登录方式就是 ssh + 用户名 @IP 地址)

    ssh Cloud10
    ssh Cloud11
    ssh Cloud12

    10.png

    • 退出免密登录
    exit

    11.png

# 注意事项

  • 免密码登录的处理是用户对用户的,切换其他用户后,仍然需要输入密码
  • 远程机器的.ssh 目录需要 700 权限,authorized_keys 文件需要 600 权限,否则配置是不成功的(每次登录都得重新去输入密码的)