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


    问题描述

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

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

    解决方案

    参考该博客基本可以解决问题: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    在这里插入图片描述
    再新建一个连接
    在这里插入图片描述

    在这里插入图片描述
    如果创建密钥对时输入了密码,也需要在以下截图中输入密码。

    在这里插入图片描述

    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
    
    • 1
    • 2

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

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

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

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

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

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

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

    如果你想使用特定的算法,你可以使用-t选项,如ssh-keygen -t rsassh-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-passwordPermitRootLogin without-password:这个选项防止root用户使用密码登录。这个设置增加了系统的安全性,因为攻击者不能尝试猜测root密码。

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

    sudo service ssh restart
    
    • 1

    sudo systemctl restart sshd
    
    • 1

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

  • 相关阅读:
    10.31+11.1
    SQL Server中的NULL值处理:判断与解决方案
    安卓 kotlin-supportFragmentManager报红
    java计算机毕业设计高校宿舍管理系统源码+mysql数据库+系统+lw文档+部署
    tiup mirror clone
    Final IK⭐一、简介及关键脚本 FullBodyBipedIK 讲解
    FL STUDIO21正式版升级换代更新
    实验三 Servlet 相关技术
    MongoDB 分片集群
    2022-09-17青少年软件编程(C语言)等级考试试卷(五级)解析
  • 原文地址:https://blog.csdn.net/weixin_43982238/article/details/137153634