在22以外的端口上的Amazon EC2实例上运行ssh

时间:2012-11-20 14:27:13

标签: ssh amazon-ec2 cloud

我无法通过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

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:15)

通过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

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

      

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

    • 如果它不是新实例,请编辑/etc/ssh/sshd_config文件添加/更改Port 22到您想要的端口(即:Port 443)以通过ssh连接然后执行{ {1}}你应该完成。

    注意:我使用Ubuntu实例执行此操作,其他Linux实例可能略有不同。

答案 1 :(得分:10)

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

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

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

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

答案 2 :(得分:0)

这是我想在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