#!/bin/bash function helpExit() { echo "SSH to Docker session." echo " arg: container name " echo " --help This help" exit } function rsaMissing() { echo "RSA keys missing. have you started a container here?" exit 1 } function listContainers() { docker ps -a } function isRunning() { [[ $( docker inspect --format '{{ .State.Running }}' "$1" ) = true ]] } function containerRestart() { docker restart "$1" } for (( i=1; i<=$#; i++ )); do j=$(( $i + 1 )) [[ "${!i}" = "--help" ]] && helpExit [[ "${!i}" = "-h" ]] && helpExit done set -e [[ -f .id_rsa.pub ]] || rsaMissing [[ -f .id_rsa ]] || rsaMissing [[ -z "$1" ]] && { listContainers echo "Pass container name / id" exit } cd $( dirname $( readlink -f $0 ) ) export USER=$( id -u -n ) nname=$1 isRunning $nname || containerRestart $nname while :; do sleep 3 IP=$( docker inspect --format '{{ .NetworkSettings.IPAddress }}' $nname ) [[ -z "$IP" ]] || break done echo $IP while :; do sleep 3 ssh-keyscan $IP && break done ssh -i .id_rsa -XY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $USER@$IP