AWS на Terraform - невозможно изменить порт SSH через пользовательские данные (Linux Kali) - PullRequest
0 голосов
/ 22 декабря 2019

Работа с Terraform 0.12v и провайдером AWS.

Я использую user_data для открытия SSH-соединения через порт 8080.

Мои ресурсы.tf:

resource "aws_instance" "instance" {
  user_data = "${data.template_file.init.rendered}"
  #user_data = "${file("init.sh")}" <--also did not work

  ami           = "ami-06fea6d88c62d4e26" #Update: The problem is probably related to this ami (Linux Kali)
  instance_type = "t2.medium"
  subnet_id = "${aws_subnet.public_subnet.id}"
  security_groups = ["${aws_security_group.public_sg.id}"]
  key_name = "${var.auth_key_name}"
}


data "template_file" "init" {
  template = "${file("./init.tpl")}"
  vars = {
    ssh_port = "8080"
  }
}

init.tpl:

#!/bin/bash
sudo apt update && sudo apt -y upgrade
sudo sed -i 's/22/${ssh_port}/g' /etc/ssh/sshd_config
sudo service ssh restart

Проблема: я не могу соединиться с ssh -i "my-key.pem" ec2-user@<instance-ip> -p 8080 ( соединение отклонено ).


Отладка

Для отладки я открыл порт 22 и вставил SSH в экземпляр EC2.

Когда я запускаю изнутри: ec2-user@kali:~$ cat /etc/ssh/sshd_config

Я вижу, что порт не изменился:

Port 22 <------- This was supposed to be 8080
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
.
.
.

Еще несколько моментов:

1) Это не опечатка в sed команда, потому что когда я запускаю изнутри экземпляра EC2:

sudo sed -i 's/22/8080/g' /etc/ssh/sshd_config
sudo service ssh restart

Он работает отлично.

2) Я также вижу в консоли управления AWS две строки init.tpl отображается под user_data${ssh_port} изменяется на 8080).

3) Я также попытался написать ssh_port inline как 8080, чтобы использовать обычный init.sh скрипт вместо init.tpl - все еще не работает.

4) Важное обновление - проблема, вероятно, связана с выбранным мной ами (Linux Kali), потому что когда я перешел на Amazon Linux 2 AMI (ami-0ce933e2ae91880d3), все отлично работает .

Любая помощьбудет очень признателен.


Дополнительные связанные файлы.

security-group.tf:

resource "aws_security_group" "public_sg" {
  name        = "public_sg"
  description = "Allow specific ports only"
  vpc_id      = "${aws_vpc.base_vpc.id}"

  ingress {
    from_port   = "8080"
    to_port     = "8080"
    protocol    = "tcp"
    cidr_blocks     = ["0.0.0.0/0"]

  }

  egress {
    from_port       = 0
    to_port         = 0
    protocol        = "-1"
    cidr_blocks     = ["0.0.0.0/0"]
  }

}

provider.tf:

provider "aws" {
  region = "ap-south-1"
  shared_credentials_file = ".credentials"
}

Полное содержимое /etc/ssh/sshd_config

ec2-user@kali:~$ cat /etc/ssh/sshd_config 
Port 22
Protocol 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_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
PermitRootLogin prohibit-password
PasswordAuthentication no
ClientAliveInterval 180

Я обнаружил следующие связанные темы:

Запуск ssh на экземпляре Amazon EC2 через порт, отличный от 22 * ​​1075 *

Запуск экземпляра EC2 неожиданно отказывает в SSH-соединении

Команды в user_data не выполняются в terraform

Но не найденырешение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...