如何在亚马逊EC2实例中启用root SSH访问?

31

这个问题困扰了我好几天。

我一直在努力搭建Amazon EC2上的LAMP服务器。主要问题是,我正在为客户编写一个需要大量高端处理的应用程序,而Amazon EC2似乎是一个不错的选择。

最初,我开始使用一个基本的AMI,该AMI实际上什么都没有。我尝试使用root访问SSH(使用WinSCP),结果被告知要使用ec2-user。

我尝试使用ec2-user登录,成功进入了系统。然而,我仍然没有root权限,也无法安装apache。我进行了一些研究,发现了"sudo"命令,并且几乎每篇关于此问题的文章都建议要么使用root访问,要么登录ec2-user并使用sudo。

后来我再次尝试了一个已经安装了LAMP的不同AMI。我能够让它工作,设置了数据库并开始从中运行网站。但是,我仍然需要安装一些扩展程序。特别是,我正在尝试使用一个API,该API要求安装SOAP。

这就是我的困境所在:

/$ whereis soap
soap:
/$ whereis yum
yum: /usr/bin/yum /etc/yum /etc/yum.conf /usr/share/man/man8/yum.8.gz
/$ yum install php-soap
Loaded plugins: fastestmirror, priorities, security
You need to be root to perform this command.
/$ sudo yum install php-soap
sudo: sorry, you must have a tty to run sudo

Command 'sudo yum install php-soap' failed with return code 1 and error message sudo: sorry, you must have a tty to run sudo

由于我没有root访问权限,所以无法使用yum,每当我登录root时,它要么告诉我使用ec2-user,要么提供一个我没有的密码。另一种选择是使用sudo使ec2-user像root一样工作,但我总是收到错误“对不起,您必须拥有tty才能运行sudo”。我在网上运行了该错误消息,发现我需要将用户添加到sudoers中...但我没有root访问权限。

这个确切的问题困扰了我两个独立的AMI。在第一个中,我只收到一条消息,说我必须以ec2-user身份登录(我必须要有tty才能运行sudo),而第二个(已安装LAMP)则要求我输入root密码,而对于用户,我得到了相同的sudo错误。

以下是我使用的AMI的ID:

ami-8c1fece5
ami-6ae81503

我之前尝试了一个已安装LAMP的第三个AMI...但是我根本无法进入那个AMI。

我下载了我的SSH密钥并使用PuttyGen将其转换为ppk文件。 我可以成功用ec2-user登录,但是我无法在任何地方获得root访问权限。

我一直在寻找帮助,但我阅读的每篇文章都假定用户具有可用的root访问权限或者在ec2-user上有sudo权限。 我两者都没有。 难道我需要一个新的镜像吗?

非常感谢任何帮助......


真的,这不是一个编程问题或与stackoverflow.com有关... 应该转移到http://unix.stackexchange.com/ -- 但丹·格罗斯曼回答了你的问题... - sdolgy
我觉得这与编程有关,所以应该算在内... - JaidynReiman
6个回答

76

我刚刚尝试了

$ sudo su

在您的朋友中的一个 amis 上运行它,然后就大功告成了!我是超级用户...

玩得愉快!

[ec2-user@ip-10-244-146-238 ~]$ sudo su
[root@ip-10-244-146-238 ec2-user]# 

谢谢您的帮助,但我以前做过这件事,它仍然没有起作用。问题是我试图使用的程序(我只是以为WinSCP的命令提示符与其他任何东西都一样,但显然不是...)。 - JaidynReiman
我们可以像这样为root设置密码,如何启用root用户?默认情况下它是禁用的。 - Chaminda Bandara

5

请使用真正的SSH客户端,例如PuTTY,而不是WinSCP这样的文件传输客户端。所有问题都将消失。


1
谢谢...我对命令行提示符和SSH有点陌生,所以我只是假设WinSCP可以正常工作...现在我已经把它弄好了。 - JaidynReiman
+1 唯一让我成功的方法是从PuTTY中运行sudo而不是WinSCP - 非常感谢,让我的一天变得美好 :) - user1409372
2
这实际上并没有回答“如何在Amazon EC2实例中启用Root SSH访问?”的问题... - Félix Adriyel Gagnon-Grenier
@FélixGagnon-Grenier,这是因为他真正的问题是“如何解决此错误you must have a tty to run sudo”。对于标题中提出的更一般但与提问者无关的问题的答案在我的下面。这个问题已经有5年的答案了,所以我不确定你为什么现在感觉需要发表那个评论。 - Dan Grossman
1
哦,我并不是在满足需求,只是在陈述我对所看到的内容的理解。没有任何冒犯之意。 - Félix Adriyel Gagnon-Grenier
这不是答案。 - Chaminda Bandara

4

针对Debian或Ubuntu EC2:

  1. Set root password via putty:

    sudo passwd root
    
  2. Log in to putty as root

    ubuntu@aws1:~$ su
    Password:
    
  3. Edit your /etc/ssh/sshd_config file and comment out the the last HostKey statement or the one similar to the last one in the example below:

    vi /etc/ssh/sshd_config
    

那么

    # HostKeys for protocol version 2
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    #HostKey /etc/ssh/ssh_host_ed00000_key
  1. In same file, change the following to look like below:

    PermitRootLogin yes
    #PasswordAuthentication no
    
  2. Restart ssh

    service ssh restart
    
  3. Log in as root with password from WinSCP

*在编辑之前,我建议先创建一个sshd_config文件的备份,并在完成后恢复回原始状态。


服务应该是 sshd,所以执行 service sshd restart - tmarois
@timothymarois 适用于 CentOS/RedHat 的 sshd - Chaminda Bandara

1

文件:

/etc/sudoers

有一行

Defaults requiretty

将其注释掉可能会使错误消失。

我建议首先尝试理解为什么您的yum命令中没有终端。

更改像/etc/sudoers这样的安全相关文件可能非常危险。


1

(Bug报告?)这是我在一个ec2实例上的日志,有时sudo su无法工作。我必须退出并重新ssh才能使其正常工作。

    [ec2-user@ip-XXXX ~]$ su root
    Password:
    su: incorrect password
    [ec2-user@ip-XXXX ~]$ exit
    logout
    Connection to ec2-50XXXX.compute-1.amazonaws.com closed.
    ssh -i automata.pem ec2-user@ecXXXX.compute-1.amazonaws.com
    whereis yum
    yum: /usr/bin/yum /etc/yum.conf /etc/yum /usr/share/man/man8/yum.8.gz
    [ec2-user@ip-XXXX ~]$ sudo su
    [root@ip-XXXX ec2-user]#

我不确定。我甚至不再使用亚马逊 AWS。但我遇到的真正问题是我使用了错误的程序。 - JaidynReiman

1
你需要编辑sshd_config文件以允许基于密码的访问,同时需要为root用户添加密码。只需按照以下步骤操作: sudo passwd root sudo nano -w /etc/ssh/sshd_config 取消注释/添加以下行PasswordAuthentication yes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接