在 Linux 中通过 SSH 连接到 Amazon EC2

Posted

技术标签:

【中文标题】在 Linux 中通过 SSH 连接到 Amazon EC2【英文标题】:SSH connection to Amazon EC2 in Linux 【发布时间】:2012-02-17 14:18:36 【问题描述】:

我正在尝试使用以下命令从 shell SSH 到亚马逊 ec2 实例

ssh -vi sec.ppk ubuntu@ec2-xx.compute-1.amazonaws.com

但连接失败

这是上面命令生成的调试输出

OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 Mar 2009
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to ec2-xx.compute-1.amazonaws.com port 22.
debug1: Connection established.
debug1: identity file security1.ppk type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.5p1 Debian-4ubuntu5
debug1: match: OpenSSH_5.5p1 Debian-4ubuntu5 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'ec2-xx.compute-1.amazonaws.com' is known and matches the RSA host key.
debug1: Found key in /home/ma/.ssh/known_hosts:9
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: sec.ppk
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key 'sec.ppk': 

为什么它要求 sec.ppk 的密码

有什么问题?有人可以帮忙吗?

忘了提到我使用 FileZilla 成功建立了与上述相同凭据的连接

【问题讨论】:

因为sec.ppk 是用密码加密的。你试过输入吗? 但是我使用 FileZilla 成功地建立了连接,并使用相同的密钥使用相同的上述凭据。 这意味着 FileZilla 已将密码存储在其设置中。 但是怎么做?除了密钥文件、用户名和主机之外,我从来没有给它任何东西。 糟糕,我忽略了前面几行,它们表示专有(或至少不受支持)密钥格式。查看 Ravi 的答案,其中详细说明了以及如何将您的密钥转换为与 openssh 兼容的格式。 【参考方案1】:

试试

ssh -i /directory/keyname.pem ubuntu@ec2-xx.compute-1.amazonaws.com

其中 .pem 是您在设置实例时创建的密钥对文件。

【讨论】:

非常感谢。使用 .pem 文件成功建立连接。 你需要在-i这一行把改成-【参考方案2】:

适用于 AWS 的新用户。 .ppk 扩展与 openSSH 不兼容,因此仅适用于 FileZilla / PutTTY。

在这种情况下,最简单的做法是安装 PutTTY 并使用 putty-tools 将 .ppk 转换为 .pem。下面是命令

sudo apt-get install putty
puttygen <path_to_key>/keyname.ppk -O private-openssh -o aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>

希望这有助于作为一个快速的解决方案。

【讨论】:

谢谢, 谢谢兄弟。你成功了。 这应该被接受的答案,因为它很简短,有时你没有配对密钥(pem)所以这个答案足够简短,可以给你两个想法,第一个 ppk 与 openssh 不兼容,第二个如何从 ppk 生成 pem。【参考方案3】:

听起来您已经使用密码创建了您的私钥。您是如何创建密钥对的?您在创建私钥时是否输入了密码?

您需要输入您在创建密钥时提供的密码。和

debug1: read PEM private key done: type <unknown>

这表明,您的密钥未被识别。理想情况下,您会得到一个类似 RSA 的方法名称。

进一步检查您是否在某处有像 id_rsa.pub 这样的公钥,如果有,请尝试使用它,以防您忘记密码。

编辑:

好的,猜猜你使用的是亚马逊的 ppk。要使用您的 EC2-priv.ppk 密钥,您必须将其转换为 OpenSSH 可以理解的格式。您可以使用 PutTTYgen 程序执行此操作。这将为您创建一个 .pub 文件,然后您可以使用该文件进行连接。

【讨论】:

但是 FileZilla 是如何在没有密码的情况下成功建立连接的呢?

以上是关于在 Linux 中通过 SSH 连接到 Amazon EC2的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中通过 SSH 隧道连接到 Mongo 数据库

在 Netbeans 中通过 SSH 连接到 MySql db

在 PHP 中通过 SSH 连接到 MySQL

用于从该框中通过 SSH 连接到 jumphost 和 sftp 的 Python 脚本

在 Mac OSx 上通过 SSH 连接到 EC2 时出现权限错误

在 Java 中通过 SSH 隧道运行远程命令