diff --git a/Makefile b/Makefile index 465b5ff..b38b46e 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ # paths PREFIX = /home/${USER}/.local +CONFPREFIX = /home/${USER}/.config MANPREFIX = $(PREFIX)/share/man SHELL = bash @@ -16,8 +17,11 @@ install: cp sshin $(PREFIX)/bin mkdir -p $(DESTDIR)$(MANPREFIX)/man1 cp sshin.1 $(DESTDIR)$(MANPREFIX)/man1 + mkdir -p $(DESTDIR)$(CONFPREFIX)/sshin + cp -n hosts.example $(DESTDIR)$(CONFPREFIX)/sshin/hosts uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/sshin rm -f $(DESTDIR)$(MANPREFIX)/man1/sshin.1 + rm -f $(DESTDIR)$(CONFPREFIX)/sshin/ diff --git a/sshin b/sshin index 9b1ae57..396ae0f 100755 --- a/sshin +++ b/sshin @@ -1,49 +1,28 @@ #!/bin/bash -usage() { - echo "Usage: sshin user hostname/last byte of IP address" - echo - echo "This tools automatically chooses the server port based on the port_association file in ~/local/share/sshin/port_association" - echo - echo "Example: \"sshin foo bar.com \" will run \"ssh foo@bar.com -p 2323\"" - echo "Example: \"sshin foo 43 \" will run \"ssh foo@192.168.1.43\"" - return -} +command="ssh " -IP_PREFIX="192.168.1." -[[ $# -le 1 ]] && usage && exit 1 -[[ $1 = "-h" ]] && usage -h && exit 1 -re='^[0-9]+$' +MANY_ARGS=$# +[[ $MANY_ARGS -eq 2 ]] && SSHIN_USER=$1 && shift +DOMAIN=$1 -USUAL_PUBKEY=~/.ssh/id_rsa -YUBIKEY_PUBKEY=~/.ssh/id_ed25519_sk +IFS="," read -r DOMAIN DEFAULT_USER REMOTE_PORT LOCAL_PORT YUBIKEY_SUPPORT USUAL_PUBKEY YUBIKEY_PUBKEY < <(tail -n +2 $HOME/.config/sshin/hosts | grep $DOMAIN | head -n 1) -HOSTS_FILE=~/.local/share/sshin/hosts +[[ $MANY_ARGS -eq 1 ]] && SSHIN_USER=$DEFAULT_USER -command="ssh ${1}@" -shift -if [[ $1 =~ $re ]] -then - command="${command}192.168.1.$1" -else - [[ $(uname) = "Linux" ]] && ports_file="$HOME/.local/share/sshin/port_association" || ports_file="$HOME/sshin/port_association" - port=$(grep $1 $ports_file | awk '{print $2}') - command="${command}$1" - [[ -n $port ]] && command="${command} -p $port" - dport=$(grep $1 $ports_file | awk '{print $NF}') - [[ -n $port ]] && command="${command} -D$dport" -fi +command="${command} ${SSHIN_USER}@${DOMAIN}" -#check if Yubikey is present lsusb | grep -q "Yubico" && YUBIKEY_PRESENCE=1 || YUBIKEY_PRESENCE=0 - -#check if the host you are connecting to has Yubikey support (both client and server need openssh >= 8.2) -YUBIKEY_SUPPORT=$(cat $HOSTS_FILE | grep $1 | awk '{print $2}') -[[ $YUBIKEY_SUPPORT = "" ]] && echo "vuoto" && YUBIKEY_SUPPORT=0 - - -[[ $YUBIKEY_PRESENCE -eq 1 ]] && [[ $YUBIKEY_SUPPORT -eq 1 ]] && command="${command} -i $YUBIKEY_PUBKEY" || command="${command} -i $USUAL_PUBKEY" - -echo $command -#echo $YUBIKEY_SUPPORT -$command +[[ $YUBIKEY_PRESENCE -eq 1 ]] && [[ $YUBIKEY_SUPPORT -eq 1 ]] && command="${command} -i $YUBIKEY_PUBKEY" +[[ $USUAL_PUBKEY ]] && command="${command} -i ${USUAL_PUBKEY}" +[[ $REMOTE_PORT ]] && command="${command} -p ${REMOTE_PORT}" +[[ $LOCAL_PORT ]] && command="${command} -D${LOCAL_PORT}" +echo "${command}" +sleep 1 +#echo "Domain $DOMAIN" +#echo "User $DEFAULT_USER" +#echo "Remote $REMOTE_PORT" +#echo "Local $LOCAL_PORT" +#echo "Support $YUBIKEY_SUPPORT" +#echo "Usual $USUAL_PUBKEY" +${command}