#!/bin/bash -- set -e [[ "$DEBUG" == "1" ]] && set -x LOCALPORT="$(echo "$1" | cut -d ':' -f1)" DOMAIN="$(echo "$1" | cut -d ':' -f2)" PORT="$(echo "$1" | cut -d ':' -f3)" print_usage() { cat >&2 <<USAGE Usage: $0 [localport]:[vmname]:[port] Bind localport to another VM port using the qubes.ConnectTCP RPC service. USAGE } check_port() { [[ "$1" -ge 1 ]] && [[ "$1" -le 65535 ]] } if [ $# -lt 1 ] ; then print_usage exit 1 fi [[ -z "$PORT" ]] && { echo "Please provide PORT"; exit 1; }; [[ -z "$LOCALPORT" ]] && LOCALPORT="$PORT" if check_port "$PORT" && check_port "$LOCALPORT"; then if [ -n "$DOMAIN" ]; then msg="Binding TCP '$DOMAIN:$PORT' to 'localhost:$LOCALPORT'..." else msg="Binding TCP '@default:$PORT' to 'localhost:$LOCALPORT'..." fi echo "$msg" sudo socat TCP-LISTEN:"$LOCALPORT",reuseaddr,fork EXEC:"qrexec-client-vm \'$DOMAIN\' qubes.ConnectTCP+$PORT" & else echo "Invalid port provided" exit 1 fi