Documentation

Working with SSH on Qarnot

#!/usr/bin/env python

import qarnot

conn = qarnot.Connection(client_token = '<<<MY_SECRET_TOKEN>>>')
task = conn.create_task('ssh-example', 'docker-network-ssh')

task.constants['DOCKER_SSH'] = '<<<MY_SSH_PUBLIC_KEY>>>'

task.constants['DOCKER_CMD'] = "/bin/bash -c 'mkdir -p ~/.ssh /run/sshd ;" \
                               "echo \"${DOCKER_SSH}\" >> ~/.ssh/authorized_keys ;" \
                               "/usr/sbin/sshd -D'"
task.submit()

last_state = ''
ssh_tunneling_done = False
while not ssh_tunneling_done:
    if task.state != last_state:
        last_state = task.state
        print("** {}".format(last_state))

    # Wait for the task to be FullyExecuting
    if task.state == 'FullyExecuting':
        # If the ssh connexion was not done yet and the list active_forward is available (len!=0)
        forward_list = task.status.running_instances_info.per_running_instance_info[0].active_forward
        if not ssh_tunneling_done and len(forward_list) != 0:
            ssh_forward_port = forward_list[0].forwarder_port
            ssh_forward_host = forward_list[0].forwarder_host
            cmd = f"ssh -o StrictHostKeyChecking=no root@{ssh_forward_host} -p {ssh_forward_port}"
            print(cmd)
            ssh_tunneling_done = True

    # Display errors on failure
    if task.state == 'Failure':
        print("** Errors: %s" % task.errors[0])
        ssh_tunneling_done = True

Any feedback on this page ?