#! /usr/bin/env python # Copyright © 2019 Uwe Schitt <uwe.schmitt@id.ethz.ch> import pexpect import sys import time import pdb from pexpect.exceptions import TIMEOUT credentials = [line.split() for line in open("credentials.txt")] EULER = "euler.ethz.ch" def open_conn(cmd): print(cmd) conn = pexpect.spawn(cmd, echo=True, encoding="utf-8") conn.logfile = sys.stdout return conn def auth_pw(conn, password): conn.expect("password:") conn.sendline(password) def accept_license_agreements(user, password): ssh_conn = open_conn(f"ssh {user}@{EULER}") auth_pw(ssh_conn, password) try: ssh_conn.expect("to exit: ", timeout=1) ssh_conn.sendline("Yes") time.sleep(.5) except TIMEOUT: pass ssh_conn.close() def create_ssh_folders(user, password): ssh_conn = open_conn(f"ssh {user}@{EULER} 'mkdir -p .ssh; ls -al .ssh'") auth_pw(ssh_conn, password) ssh_conn.expect(pexpect.EOF) ssh_conn.close() def deploy_ssh_keys(user, password): ssh_conn = open_conn(f"scp id_rsa.pub {user}@{EULER}:.ssh/authorized_keys") auth_pw(ssh_conn, password) ssh_conn.expect(pexpect.EOF) ssh_conn.close() def check_passwordless_login(user): ssh_conn = open_conn(f"ssh -i id_rsa {user}@{EULER}") try: ssh_conn.expect("password: ", timeout=1) except TIMEOUT: return True else: return False finally: ssh_conn.close() flags = [] for user, password in credentials: accept_license_agreements(user, password) create_ssh_folders(user, password) deploy_ssh_keys(user, password) ok = check_passwordless_login(user) flags.append(ok) assert all(flags)