Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

620
Vistas
¿Cómo usar SSH y ejecutar comandos en EC2 usando boto3?

Quiero poder acceder a una instancia de EC2 y ejecutar algunos comandos de shell en ella, como este .

¿Cómo lo hago en boto3?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Este hilo es un poco antiguo, pero dado que pasé una tarde frustrante descubriendo una solución simple, también podría compartirlo.

NB Esta no es una respuesta estricta a la pregunta del OP, ya que no usa ssh. Pero, un punto de boto3 es que no tiene que hacerlo, por lo que creo que, en la mayoría de las circunstancias, esta sería la forma preferida de lograr el objetivo del OP, ya que puede usar su configuración de boto3 existente de manera trivial.

El comando de ejecución de AWS está integrado en botocore (por lo que esto debería aplicarse tanto a boto como a boto3, hasta donde yo sé), pero descargo de responsabilidad: solo probé esto con boto3 .

 def execute_commands_on_linux_instances(client, commands, instance_ids): """Runs commands on remote linux instances :param client: a boto/boto3 ssm client :param commands: a list of strings, each one a command to execute on the instances :param instance_ids: a list of instance_id strings, of the instances on which to execute the command :return: the response from the send_command function (check the boto3 docs for ssm client.send_command() ) """ resp = client.send_command( DocumentName="AWS-RunShellScript", # One of AWS' preconfigured documents Parameters={'commands': commands}, InstanceIds=instance_ids, ) return resp # Example use: ssm_client = boto3.client('ssm') # Need your credentials here commands = ['echo "hello world"'] instance_ids = ['an_instance_id_string'] execute_commands_on_linux_instances(ssm_client, commands, instance_ids)

Para los comandos de PowerShell de la instancia de Windows, usaría una opción alternativa:

 DocumentName="AWS-RunPowerShellScript",
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el siguiente fragmento de código para acceder a una instancia EC2 y ejecutar algún comando desde boto3.

 import boto3 import botocore import paramiko key = paramiko.RSAKey.from_private_key_file(path/to/mykey.pem) client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # Connect/ssh to an instance try: # Here 'ubuntu' is user name and 'instance_ip' is public IP of EC2 client.connect(hostname=instance_ip, username="ubuntu", pkey=key) # Execute a command(cmd) after connecting/ssh to an instance stdin, stdout, stderr = client.exec_command(cmd) print stdout.read() # close the client connection once the job is done client.close() break except Exception, e: print e
over 4 years ago · Santiago Trujillo Denunciar

0

Así es como lo he hecho

 import boto3 import botocore import boto import paramiko ec2 = boto3.resource('ec2') instances = ec2.instances.filter( Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]) i = 0 for instance in instances: print(instance.id, instance.instance_type) i+= 1 x = int(input("Enter your choice: ")) try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) privkey = paramiko.RSAKey.from_private_key_file('address to .pem key') ssh.connect(instance.public_dns_name,username='ec2-user',pkey=privkey) stdin, stdout, stderr = ssh.exec_command('python input_x.py') stdin.flush() data = stdout.read().splitlines() for line in data: x = line.decode() #print(line.decode()) print(x,i) ssh.close()

Para las credenciales, agregué el paquete AWSCLI, luego en la ejecución del terminal

 aws configure

ingrese las credenciales. Todos ellos se guardarán en la carpeta .aws, también puede cambiar la ruta.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda