【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

07-14 1102阅读

文章目录

    • 问题描述
    • 解决方案
    • Q&A

      问题描述

      本地cmd或powershell使用ssh -i “your.pem” user_name@ip_address是可以登录Amazon EC2云服务器的。

      然而,当使用XShell以SSH加载PEM文件方式登录亚马逊EC2云服务器,一直出现输入密码的问题,如下截图所示:

      【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

      解决方案

      参考该博客基本可以解决问题:https://blog.csdn.net/fly_leopard/article/details/132540483

      基本原理:创建一个新的 SSH 密钥对,并将公钥添加到服务器的授权列表中,以便使用对应的私钥进行 SSH 登录。

      cd ~/.ssh/
      # 生成一对 ECDSA 密钥。生成密钥时不设置密码就直接回车。
      ssh-keygen -t ecdsa -f my_aws_key
      # 将公钥添加到服务器的授权密钥列表中,以实现密钥对认证。
      cat my_aws_key.pub >> authorized_keys
      # 复制私钥的内容,然后在本地保存为一个私钥文件。注意,私钥必须严格保密,不要泄露给任何人!!!
      cat my_aws_key
      

      Xshell添加刚刚保存的私钥文件

      【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

      再新建一个连接

      【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

      【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

      如果创建密钥对时输入了密码,也需要在以下截图中输入密码。

      【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

      done.

      Q&A

      1.怎么理解该命令:ssh-keygen -t ecdsa

      ssh-keygen -t ecdsa是一个在Unix或类Unix系统(如Linux)中生成SSH(Secure Shell)密钥对的命令。SSH是一个用于远程登录到服务器,执行命令和管理系统的协议。

      这个命令的各个部分的意义如下:

      • ssh-keygen:这是一个生成SSH密钥对的程序。SSH密钥对包括一个公钥和一个私钥,你可以将公钥放在远程服务器上,然后用你的私钥来登录。
      • t:这是一个选项,用来指定生成的密钥类型。
      • ecdsa:这是一个密钥类型,表示使用椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm)。这种算法比RSA和DSA更安全,同时生成的密钥长度更短,所以更高效。

        所以,ssh-keygen -t ecdsa命令的作用就是生成一个使用椭圆曲线数字签名算法的SSH密钥对。

        2.如何生成指定文件名的公私钥,以及对应的pem文件

        在ssh-keygen命令后面加上-f选项和文件名来指定生成的公私钥的文件名。

        # 生成名为mykey的私钥和名为mykey.pub的公钥
        ssh-keygen -t ecdsa -f mykey
        

        再使用openssl命令将生成的私钥转换为PEM格式。

        # 将mykey转换为mykey.pem
        openssl ec -in mykey -out mykey.pem
        

        请注意,这些命令可能需要你输入密码来保护你的私钥。如果不希望输入密码,可以在ssh-keygen命令后面加上-N ""选项。例如:

        ssh-keygen -t ecdsa -f mykey -N ""
        

        3.ssh-keygen默认使用什么算法?

        ssh-keygen的默认算法可能会根据你的系统或SSH版本不同而不同。然而,从OpenSSH 7.0开始,默认算法是ed25519。ed25519是一种使用Edwards曲线的公钥签名算法,它提供了更好的安全性和效率。

        你可以通过运行ssh-keygen命令而不带任何参数,然后查看生成的公钥文件(默认为~/.ssh/id_rsa.pub或~/.ssh/id_ed25519.pub),来确定你的系统使用的默认算法。公钥文件的开头将会指示使用的算法,例如ssh-rsa或ssh-ed25519。

        如果你想使用特定的算法,你可以使用-t选项,如ssh-keygen -t rsa或ssh-keygen -t ecdsa。

        4.使用ssh-rsa算法生成的公私钥为什么在远程连接时还需要输入密码?

        当你使用SSH公钥认证方式连接到远程服务器时,通常需要输入两种类型的密码:

        1. SSH密钥密码:当你创建SSH密钥对时,有选项为私钥设置密码。这是为了保护私钥不被未授权使用。每次使用这个私钥时(例如,使用SSH连接到远程服务器),你都需要输入这个密码。如果你在创建密钥对时没有设置密码,那么在使用这个私钥时就不需要输入密码。
        2. 远程用户密码:即使你使用SSH密钥认证,远程服务器可能仍然需要你输入远程用户的密码。这是因为SSH公钥认证和用户密码认证是两个独立的步骤。即使SSH公钥认证成功,你仍然需要知道远程用户的密码才能登录。然而,许多服务器会配置为只使用SSH公钥认证,这样就不需要输入用户密码。

        如果你每次连接都需要输入私钥密码,你可以考虑使用ssh-agent程序来记住你的私钥和密码,这样你就不需要每次都输入密码了。只需谨慎使用,因为任何能访问ssh-agent的人都可以使用你的SSH密钥。

        5.服务器怎么配置只使用SSH公钥认证?

        要配置服务器只接受SSH公钥认证,需要修改SSH守护进程的配置文件,通常这个文件是/etc/ssh/sshd_config。

        以下是一些可能需要修改或确认的设置:

        1. PubkeyAuthentication yes:这个选项启用公钥认证。默认情况下,这个选项通常是开启的。
        2. PasswordAuthentication no:这个选项禁止密码认证。将这个选项设置为no可以确保只有持有有效公钥的用户才能登录。
        3. ChallengeResponseAuthentication no:这个选项禁止质询-响应认证。将这个选项设置为no可以防止其他认证方法。
        4. PermitRootLogin prohibit-password或PermitRootLogin without-password:这个选项防止root用户使用密码登录。这个设置增加了系统的安全性,因为攻击者不能尝试猜测root密码。

        修改完sshd_config文件后,你需要重新启动SSH守护进程以使修改生效。在大多数系统上,你可以使用以下命令来完成:

        sudo service ssh restart
        

        sudo systemctl restart sshd
        

        note: 这些设置将禁止所有形式的密码认证,包括通过SSH的交互式密码认证。因此,在关闭密码认证之前,应该确保公钥已经添加到服务器的~/.ssh/authorized_keys文件中,否则可能会被锁在系统外面。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]