start | find | index | login or register | edit
2003-12-13
by earl, 7429 days ago
toolchain trickkiste teil 497 komma 32 - wie bringt man screen dazu mit agent forwarding vernuenftig zurechtzukommen?

die situation: agent forwarding. weil ich heut gut aufglegt bin, was ist ein agent? anstatt sich mit username und password zu authentifizieren, kann man sich auch ueber public key mechanismen authentifizieren. da is noch nicht viel dabei, weil man zur verwendung des private keys erst wieder ein password braucht. alternativ kann man aber seinen key in einen agent laden, gibt bei diesem laden einmal ein passwort ein und laesst dann den agent diese authentifizierung machen.

was ist nun agent forwarding? rechner A ist mein lokaler rechner, auf dem auch der agent laeuft. ich logge mich von A auf B ein, auth'e ueber den agent. wenn ich mich jez von B aus auf C einloggen will und dieses login ueber den agent auf A auth'e, dann ist das agent forwarding.

wie funktioniert agent forwarding, grob umrissen? am host B wird bei jeder ssh session ein (unix-)socket angelegt, ueber den dann dort mit dem agent (auf A) kommuniziert werden kann. wo sich dieser socket befindet, wird in der environment variable SSH_AUTH_SOCK vermerkt. wenn man jez von host B via ssh auf host C sich einloggen will, wird ueber SSH_AUTH_SOCK eine "sprechmoeglichkeit" mit dem agent gefunden, und versucht diesen agent auch weiterhin fuer auth-zwecke zu verwenden.

gut! das eigentliche problem: wenn man jez auf host B jedoch mit screen (und detach/reattach) arbeitet, funzt das forwarding in den screens nicht mehr so direkt. alle screens haben ja lokale environments. das heisst, das beim ersten erzeugen der screens zwar SSH_AUTH_SOCK in die lokalen environments uebernommen wird, aber wenn ich nun detache, irgendwann spaeter, in einer andren ssh session reattache, dann zeigt das SSH_AUTH_SOCK in den screens auf irgendwelche schon laengst nicht mehr existenten sockets.

lange, lange rede. die kurze loesung: innerhalb der screens mit SSH_AUTH_SOCK auf einen symlink zeigen, und den symlink bei jedem login aktualisieren. zB bei bash in die .bashrc ein
ln -sf $SSH_AUTH_SOCK /tmp/agent.$USER
oder aehnliches. dann noch ein
unsetenv SSH_AUTH_SOCK
setenv SSH_AUTH_SOCK '/tmp/agent.$USER'
ins .screenrc (und dort vor evtlen screens) und das ssh leben ist wieder ein stueck schoener geworden.
powered by vanilla
echo earlZstrainYat|tr ZY @.
earl.strain.at • esa3 • online for 8443 days • c'est un vanilla site