文章目录
- 问题描述
- 解决方案
- Q&A
问题描述
本地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
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
再使用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公钥认证方式连接到远程服务器时,通常需要输入两种类型的密码:
- SSH密钥密码:当你创建SSH密钥对时,有选项为私钥设置密码。这是为了保护私钥不被未授权使用。每次使用这个私钥时(例如,使用SSH连接到远程服务器),你都需要输入这个密码。如果你在创建密钥对时没有设置密码,那么在使用这个私钥时就不需要输入密码。
- 远程用户密码:即使你使用SSH密钥认证,远程服务器可能仍然需要你输入远程用户的密码。这是因为SSH公钥认证和用户密码认证是两个独立的步骤。即使SSH公钥认证成功,你仍然需要知道远程用户的密码才能登录。然而,许多服务器会配置为只使用SSH公钥认证,这样就不需要输入用户密码。
如果你每次连接都需要输入私钥密码,你可以考虑使用ssh-agent
程序来记住你的私钥和密码,这样你就不需要每次都输入密码了。只需谨慎使用,因为任何能访问ssh-agent
的人都可以使用你的SSH密钥。
5.服务器怎么配置只使用SSH公钥认证?
要配置服务器只接受SSH公钥认证,需要修改SSH守护进程的配置文件,通常这个文件是/etc/ssh/sshd_config
。
以下是一些可能需要修改或确认的设置:
PubkeyAuthentication yes
:这个选项启用公钥认证。默认情况下,这个选项通常是开启的。PasswordAuthentication no
:这个选项禁止密码认证。将这个选项设置为no
可以确保只有持有有效公钥的用户才能登录。ChallengeResponseAuthentication no
:这个选项禁止质询-响应认证。将这个选项设置为no
可以防止其他认证方法。PermitRootLogin prohibit-password
或PermitRootLogin without-password
:这个选项防止root用户使用密码登录。这个设置增加了系统的安全性,因为攻击者不能尝试猜测root密码。
修改完sshd_config
文件后,你需要重新启动SSH守护进程以使修改生效。在大多数系统上,你可以使用以下命令来完成:
sudo service ssh restart
或
sudo systemctl restart sshd
note: 这些设置将禁止所有形式的密码认证,包括通过SSH的交互式密码认证。因此,在关闭密码认证之前,应该确保公钥已经添加到服务器的~/.ssh/authorized_keys
文件中,否则可能会被锁在系统外面。