2
0
mirror of https://github.com/msantos/xmppipe synced 2024-11-16 00:12:59 +00:00
xmppipe/examples/ssh-over-xmpp
2016-09-23 10:07:22 -04:00

71 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
## Tunnel ssh over an XMPP MUC
##
## Server (system with access to the SSH and XMPP server):
##
## # ssh-over-xmpp server <conference> <IP address> <port>
## ssh-over-xmpp server sshxmpp 1.2.3.4 22
##
## Client (system with access to the XMPP server):
##
## ssh -o ProxyCommand="ssh-over-xmpp client sshxmpp" 127.0.0.1
##
set -o errexit
set -o nounset
set -o pipefail
if [ "$DEBUG" ]; then
set -x
fi
PROGNAME=$0
TMPDIR=$(mktemp -d)
out=$TMPDIR/out
atexit() {
rm -rf $TMPDIR
}
decode() {
while read line; do
OFS=$IFS
IFS=:
set -- $line
[ "$1" = "m" ] && printf '%b' "${!#//%/\\x}"
IFS=$OFS
done
}
server() {
CONNECT=0
xmppipe -e -r server -o $1 -b 1024 -x < /dev/null | \
while read line; do
case $line in
p*)
CONNECT=$((CONNECT + 1))
if [ "$CONNECT" -gt "1" ]; then
exec "$PROGNAME" session $@
fi
;;
*) ;;
esac
done > /dev/null
}
session(){
mkdir -p $TMPDIR
trap atexit 0
mkfifo $out
nc $2 $3 < $out | xmppipe -P 100 -r session -o $1 -x -s | decode > $out
}
client() {
xmppipe -P 100 -r client -o $1 -x -s | decode
}
$@