#!/bin/bash
#
# This script creates an SSH connection to a swarming machine. Firewall rules
# are in place to prevent SSH access except from corp/prod. go/gce-enforcer
# Therefore, connections must be proxied using the corp-ssh-helper for use
# from home.
#
# Prerequisites:
#   1) Have created a set of SSH credentials to use with GCE. These are
#      expected to be stored in ~/.ssh/google_compute_engine(.pub)?
#   2) Stored these SSH keys to the project metadata, where they will propagate
#      to all instances. SSH keys can be viewed at go/skia-swarm-ssh-keys
#
# Both of these Prerequisites can be achieved by running:
# gcloud compute ssh --project skia-swarming-bots chrome-bot@skia-e-gce-313
# (where skia-e-gce-313 was chosen arbitrarily).
# This command is expected to fail due with "Connection timed out" due to the
# firewall rules, but it will create the SSH keys and upload them to the project
# metadata as required. Even though we specify a single instance here, the
# project metadata is used by all instances for this project.
#
# Usage: ssh_swarm MACHINE [USER]
#
# MACHINE is something like skia-e-gce-123
# USER defaults to chrome-bot, but can be supplied if needed. Note that
#      supplying a user here may require an additional upload of SSH metadata.

USER=$2
USER=${USER:-"chrome-bot"}

# See https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh#test_network
IP=`gcloud compute instances describe $1 --format='get(networkInterfaces[0].accessConfigs[0].natIP)' --project skia-swarming-bots`

echo "Connecting to $USER@$IP"

ssh $USER@$IP -o ProxyCommand="corp-ssh-helper %h %p" -i ~/.ssh/google_compute_engine