Portál AbcLinuxu, 30. dubna 2025 14:28
Honza měl víc štěstí než rozumu, protože potkal hodnou kouzelnou babičku, která mu za pár buchet dovolila přístup do své chaloupky, která nejenže měla veřejnou IP adresu, běžela na linuxu, ale také měla povolený sshd port forwarding. Babička mu ochotně zřídila účet i pro princeznu. Honza chvíli hledal na googlu a pak se v převleku dostal na hrad, kde bydlela princezna a napsal:
ssh-keygen princenzna
scp princezna.pub princezna@chaloupka:princezna.pub
Ještě postaru, heslem, se připojila princezna do chaloupky a pomocí
cat princezna.pub>>~/.ssh/authorized_keyspřidala klíč. Honza pak princezně na hradu vytvořil soubor /home/princezna/.ssh/config, do kterého napsal:
Host chaloupka
User princezna
IdentityFile ~/.ssh/princezna
Mohli si tak přes ytalk vesele povídat aniž by král vůbec co tušil.
Jak šel čas, začal být ale Honza princezně čím dál tím bližší a chtěla ho pozvat k sobě na hrad. Jak ale na to ? Princezna šla trochu googlit a objevila reverzní tunel. Stačilo na hradě napsat ssh -R 7777:hrad:22 a Honza se mohl ze svého účtu honza@chaloupka pomocí příkazu ssh -p 7777 localhost přihlásit přímo na hrad.
Jako v každé pohádce ale přišel problém. I když pan král o ničem nevěděl, objevil se drak Paketožrout, který seděl pod hradem a žral pakety. Ke vší smůle taky princezna zapoměla svou passphrase, protože ji už rok nepotřebovala. Princ byl na pokraji zoufalství a začal vymýšlet, jak to udělat aby se přerušené spojení dalo navzovat automaticky, když jeho krásná, ale úplně blbá princezna nesedí furt u klávesnice.V diskuzi mu poradili openVPN, s tím ale neměl žádné zkušenosti a protože chtěl tunelovat jen ssh, zrodil se v jeho hlavě ďábelský plán. Udělá TunelDémona, který bude hlídat spojení a když ho Paketožrout přeruší, tak ho znovu nahodí. Aby to chodilo automaticky, i když princezna není nalogovaná, bude se muset vytvořit klíč bez passphrase, který bude v rootově vlastictví. Protože princezně počítač hlídala celá setnina královského vojska (a princezna byla jediný člověk, který měl roota), tak si mohli dovolit nezadat passphrase a pricezna se mohla jednoduše logovat pomocí ssh chaloupka. A aby si byl jistý, vytvořil následující skript, který nechal volat cronem každou hodinu:
#!/bin/sh
whereToLog="chaloupka"
remoteport="777"
localport="222"
sshcmd="ssh -R $remoteport:`uname -n`:$localport $whereToLog -n -N"
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
pid=`ps aux|grep "$sshcmd"|grep -v "grep"|sed -e s/"^\([a-z]*\)\([ ]*\)\([0-9]*\)\(.*\)"/"\3"/g`
case "$1" in
stop)
echo "Stopping TunnelD"
kill $pid
;;
start|check)
echo -n "TunnelD ... "
if test -n "$pid"; then
echo "running"
else
echo "starting"
`$sshcmd`&
logger "sshd to $whereToLog (re)started"
fi
;;
*)
echo "Usage: tunneld {start|stop|check}"
exit 1
esac
exit 0
Za chvilku to měl napsané a odladěné, došel k princezně, tam vytvořil ten klíč, nahrál skript a nastavil crona. Ssh tunel jim dobře sloužil a jestli neumřeli, tak jim to chodí dodnes.
Tiskni
Sdílej:
... ale také měla povolený sshd port forwarding.Hmmmm, tak tohle je to mocne kouzlo, ktere otevira dvirka k princeznam a ze zajimave pohadky dela tuctovou historku
#!/bin/bash if ping chaloupka -c 1 then exec ssh chaloupka ... else exec sleep 60 fiJakmile tohle skonci, init to respawne. Jakmile chcipne ssh, okamzite se zkusi pingem, zda je sit ok a pokud ano, okamzite se to znovu pripoji. Pokud ping neprojde, pocka se minutu a zkusi se to znovu.
if ping $whereToLog -c 1 then logger "sshd to $whereToLog (re)starting" ssh -R $remoteport:`uname -n`:$localport $remoteuser@$whereToLog -n -N -o ConnectTimeout=30 ConnectionAttempts=1 else logger "Link to $whereToLog too bad, respawn within 1 minute" exec sleep 60 fi
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.