15

我无法通过 ssh 访问 Amazon EC2 实例,因为我在防火墙后面。所以,我想在 22 以外的端口上运行 ssh,比如 80 或 443。

我尝试使用以下“用户数据”通过 Web 管理控制台启动 Amazon EC2 实例:

#!/bin/bash -ex
perl -pi -e 's/^#?Port 22$/Port 80/' /etc/ssh/sshd_config
service sshd restart || service ssh restart

想法是上述脚本将在实例启动时执行并将 ssh 从端口 22 切换到端口 80。(参考:http ://alestic.com/2010/12/ec2-ssh-port-80 )

但是 ssh 仍然无法在端口 80 上访问。显然“用户数据”脚本在启动时没有被执行?

我只能通过 Web 管理控制台启动停止实例,而不是从命令行(位于防火墙后面)

有任何想法吗?

4

3 回答 3

20

要通过 ssh 从不同于默认 22 的端口连接到 AWS 实例:

  1. 打开您的实例的安全组,以便它允许从您选择的源连接到该端口(任何源为 0.0.0.0/0)。
  2. 在你的例子中:

    • 这是一个新实例,您可以使用这样的用户数据脚本:

    #!/bin/bash -ex perl -pi -e 's/^#?Port 22$/Port 443/' /etc/ssh/sshd_config service sshd restart || service ssh restart

请注意,这仅在您启动新实例时才有效:

用户数据脚本和 cloud-init 指令仅在启动实例时的第一个引导周期内运行。

  • 如果它不是一个新实例,请编辑/etc/ssh/sshd_config文件添加/更改Port 22到您希望通过 ssh 连接的端口(即Port 443:),然后执行service ssh restart,您应该完成。

注意:我是用一个 Ubuntu 实例做的,用另一个 Linux 实例可能会略有不同。

于 2015-11-09T15:53:31.410 回答
13

亚马逊防火墙阻止除 22 以外的所有端口。您首先必须启用端口 80/443/whatever。

HOWTO:转到“安全组”->单击您为实例选择的组,然后单击“入站”选项卡。

在那里你可以添加你的端口。

编辑:如果您偶然还安装了 apache 或其他一些网络服务器,端口 80 将被使用并且不能被 sshd 使用。我不知道您的服务器上安装了哪个操作系统,但可能已经包含了一些网络服务器?

编辑 2:根据最后一条评论,现在似乎默认情况下所有端口都被阻止。因此,如果需要,您必须打开端口 22。八年前并非如此,但配置发生了变化;)

于 2012-11-20T14:29:44.557 回答
1

这是我想出的在 443 和 22 上运行 sshd 在 ec2 上有 rhel8

  1. 确保您的安全组允许从您的网络/IP 连接到所需端口(在我的情况下为 22 和 443)
tcp 443 1.2.3.4/32 #allow access to 443 from IP 1.2.3.4
tcp 22 1.2.3.4/32 #allow access to 22 from IP 1.2.3.4
  1. 登录 EC2 并
#install semanage with
sudo yum install -y policycoreutils-python-utils
#delete 443 from http ports
sudo semanage port -d -t http_port_t -p tcp 443
#add 443 to ssh ports
sudo semanage port -m -t ssh_port_t -p tcp 443
  1. 编辑 /etc/ssh/sshd_config
Port 22
Port 443
  1. 重启sshd
sudo service sshd restart
于 2019-09-02T20:30:03.233 回答