Re: SSH agent proxy in screen
Hari Bhaskaran <[email protected]> Mon, 25 Sep 2006 22:37:10 -0700
| Newsgroups | gmane.comp.gnu.screen |
|---|---|
| Message-ID | <[email protected]> |
There is a much simpler solution http://www.2701.org/archive/200406150000.html The key is that SSH_AGENT need not point to a socket, it can point to a symbolic link to a socket. Phil Vandry wrote: > People commonly encounter problem trying to combine use of screen and > SSH agents. If you start a screen session and then detach it and > reattach it somewhere else, the processes running inside the screen > are still going to query the old SSH agent. Often this SSH agent was > part of a login session that doesn't exist anymore (so requests fail > completely) but sometimes it still exists (worse: your software > querries an SSH agent that is not the one you are running in the > session you are sitting in front of). > > There have been various workarounds uses which can be found easily > by searching the web. They fall under these categories: > > - helper scripts to fudge up the environment variables when you > reattach. > > Example: http://deadman.org/sshscreen.html > > Cons: You have to run those scripts in every existing window (screen's > "setenv" function will only affect new windows), and long-lived > software that is already running won't use the new agent (like an > ssh client running under screen that is performing SSH forwarding to > somewhere else. > > - running a dedicated agent inside the screen session. > > Example: http://teichman.org/blog/2006/02/screen_and_ssha.html > > Cons: Your SSH agent should be as close to you as possible (your key > material should be someplace you trust). Your screen session might > not be in such a place. Also, you don't have the ability to use the > same agent as the rest of your (non-screen) apps. > > The solution I prefered to see is an SSH proxy agent built into > screen. That is, screen should intercept SSH agent requests. Since it > keeps track of which displays (terminals, sessions) it is attached to, > it should then forward the SSH agent requests to the real SSH agents > that service the sessions that are attaching to the screen session. > The result of this method is that if you detach a screen session and > reattach is somewhere else, SSH agent requests coming from within > the screen session are seamlessly forwarded to a new agent. As a > side effect, when screen is running detached, there is no agent > available at all (this is what you want, from a security point of > view). > > I implemented this solution in screen-4.0.2. Your comments are > apreciated on this method. Do you think it's feature bloat? I > think it's very useful. I will send the patch (1248 lines) if > there is some positive response :-) > > /* > * Screen SSH agent proxy > * > * Using this feature, Screen acts as an SSH agent on behalf of the > * processes that run inside the screen session. It does this by > * creating a new listening socket and propagating its location in > * the $SSH_AUTH_SOCK variable inside the screen session. The SSH > * agent is a thin proxy that forwards requests to SSH agents > * associated with the sessions under which the screen session is > * attached. When the screen session is detached the SSH agent > * requests from inside screen are not forwarded anywhere and no > * keysigning requests can be satisfied (this is what you normally > * want). If the screen session is attached again from a different > * location, the agent requests will be forwarded to the new > * location. > * > * Multiply attached sessions: the proxy tries to do something > * reasonable with each requests. Requests to remove key material > * are replicated to all attached sessions' SSH agents. Requests > * to list available keys result in the union of all successful > * responses. But a request to add a key to an agent will be > * satisfied by the first agent that reports success. > * > * To attach to a screen session without making the attaching > * session's SSH agent available inside the screen session, > * suppress your $SSH_AUTH_SOCK environment variable: > * > * SSH_AUTH_SOCK= screen -r > * > */ > > -Phil > > > _______________________________________________ > screen-devel mailing list > [email protected] > http://lists.gnu.org/mailman/listinfo/screen-devel > >