• Bug:SSH Failed Permission Denied(完美解决)


    Bug:SSH Failed Permission Denied(完美解决)

    今天我本机mac通过ssh访问linux服务器时报错:SSH Failed Permission Denied
    思路:

    • linux服务器sshd是否开启
    • linux /etc/ssh/sshd_config配置是否正确(是否开启允许公钥认证、Root方式登录等)
    • 本地mac 的~/.ssh/config是否正确(如果配置文件中未指定使用哪个私钥,默认会寻找mac的~/.ssh/id_rsa私钥与linux服务器公钥进行认证)
      我是因为本地不小心在~/.ssh/config指定了错误的私钥文件,导致与我linux的公钥验证时匹配失败。我将他注释之后重新ssh成功免密访问linux服务器。
      在这里插入图片描述
    # 详细显示通信过程(类似debug)
    ssh -v root@10.xx.xx.xx
    

    解决办法

    1. 检查目标服务器sshd服务是否开启

    systemctl status sshd
    

    在这里插入图片描述

    2. 检查目标linux /etc/ssh/sshd_config是否允许公钥认证等

    # 检查配置是否开启
    grep -E 'PermitRootLogin | PubkeyAuthentication |PasswordAuthentication' /etc/ssh/sshd_config | grep -v '#'
    

    在这里插入图片描述

    如果未开启则需按照下面方式开启对应配置:

    vim /etc/ssh/sshd_config
    
    # 允许root登录、允许使用公钥认证、允许使用密码登录
    PermitRootLogin yes 
    PubkeyAuthentication yes
    # 可选
    PasswordAuthentication yes 
    
    # 重启sshd服务
    systemctl restart sshd
    

    3. 检查本地是否有~/.ssh/config,如果有配置是否正确

    有时我们如果有多个服务,并且会使用到多个私钥的话,就会使用~/.ssh/config

    cat ~/.ssh/config
    

    比如我这次就是配置了错误的私钥与服务端验证。导致通信失败
    在这里插入图片描述

    4. ssh -v root@10.xx.xx.xx分析具体错误

    如果上面都没问题,则可以通过ssh -v查看具体通信过程,以及对应报错。

    # 查看通信详细信息
    ssh -v root@10.xx.xx.xx
    

    拓展1:linux配置免密

    1 本机mac生成私钥

    # 一路回车
    ssh-keygen -t rsa
    

    2 拷贝公钥到linux服务器

    # 拷贝指定公钥到目标服务器(将公钥拷贝到authorized_keys文件中。如果匹配成功,就允许无密码登录。)
    # 如果不-i指定公钥文件默认会拷贝~/.ssh/id_rsa.pub公钥到服务器
    ssh-copy-id root@10.xx.xx
    #ssh-copy-id -i ~/.ssh/id_rsa.pub  root@10.xx.xx.xx
    

    拓展2:~/.ssh/authorized_keys与~/.ssh/known_hosts

    ~/.ssh/authorized_keys:存放公钥,用于ssh免密登录(存在linux服务端)
    ~/.ssh/known_hosts:判断我们ssh连接的服务器是否是真实的,避免中间人攻击(存在mac客户端)

    ~/.ssh/authorized_keys 和 ~/.ssh/known_hosts 是SSH协议中两个重要的文件,它们分别服务于不同的安全目的,但共同协作保障SSH连接的安全性和便利性。

    • ~/.ssh/authorized_keys:
      作用:此文件存储在远程服务器上(您尝试连接的机器),位于用户的家目录下的.ssh目录中。它包含了允许访问该账户的所有公钥列表。当您从本地机器尝试SSH登录到远程服务器时,远程SSH服务会检查您提供的私钥是否有对应的公钥存在于authorized_keys文件中。如果匹配成功,就允许无密码登录
      安全意义:通过这种方式,SSH实现了基于密钥的身份验证,提高了安全性,避免了密码传输带来的风险。
    • ~/.ssh/known_hosts
      作用:此文件位于本地机器的用户家目录下的.ssh目录中。它记录了所有曾经连接过的远程主机的公钥指纹。当您首次尝试连接到一个新的SSH服务器时,SSH客户端会提示您验证服务器的指纹,并将其添加到known_hosts文件中。之后每次连接同一服务器时,SSH客户端都会对比远程服务器发来的公钥指纹与known_hosts中的记录,确保没有受到中间人攻击(MITM)。
      安全意义:通过维护已知主机的公钥指纹记录,known_hosts帮助检测潜在的安全威胁,确保您连接的是预期的服务器,防止被假冒的服务器欺骗

    联系与区别

    • 联系:两者都是SSH协议用来加强连接安全性的机制。authorized_keys确保了客户端的合法身份,而known_hosts确保了服务器身份的合法性,两者共同构建了SSH连接的信任基础。
    • 区别:authorized_keys关注于授权,即允许哪些客户端(通过其公钥)可以访问服务器;而known_hosts关注于验证,即本地客户端如何确认远程服务器的身份是可信的。一个是权限控制,一个是安全验证。

    拓展3:ssh root@10.xx.xx.xx采用私钥顺序

    • ~/.ssh/id_rsa: 这是最常用的私钥文件,默认情况下,SSH客户端会查找用户主目录下的.ssh/id_rsa作为私钥。
    • ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519: 如果配置了其他类型的密钥(如ECDSA或ED25519),SSH也会依次尝试这些默认的密钥文件。
  • 相关阅读:
    Map集合
    企业搭建网站选择什么配置的云服务器比较合适?
    CSS3 2D转换-扭曲、缩放
    14.5 类集对枚举的支持------ EnumMap类 与 EnumSet 类(血干JAVA系类)
    qt中Qtcpserver服务端_qt websocket
    数据结构学习笔记——图的应用1(最小生成树、最短路径)
    Linux开发环境配置
    BOT模块论文阅读
    纳米银和巯基共修饰SiO2包裹Fe3O4磁性微球/空腔型Fe3O4@mSiO2-AuNCs复合微球制备方法
    ElasticSearch全文搜索引擎
  • 原文地址:https://blog.csdn.net/weixin_45565886/article/details/139691228