Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Im working only in a screen session on my vps which runs all the time. When I connect to this server via ssh, I reattach this with a bash alias

alias screenr='screen -r -d'

What I want:

Connecting to the server and automatically reattaching the session.

What I tried:

Adding screen -r to the end of my .bashrc leads into an info message from screen, that I'm already attached to the session.

Any ideas, or did I just missed a parameter on the man page?

share|improve this question
add comment

2 Answers

up vote 3 down vote accepted

Instead of your bashrc, try using your ssh config file (~/.ssh/config). You can change it to run a command upon login. For example:

Host some_alias
Hostname                your_vps.dyndns.org
Port                    22
User                    some_user
PermitLocalCommand      yes
LocalCommand            screen -dRR screen_session_name

Then all you have to do is *ssh some_alias* and you'll automatically reattach to your screen session with the name *screen_session_name* (or create it if it doesn't exists).

Edit: By the way, this goes on your local machine, not your server.

share|improve this answer
    
Really nice way, thanks for this! –  sascha Jan 2 '12 at 10:53
1  
-1 The LocalCommand executes on the local system, not on the remote system (hence the command name). –  Arcege Jan 2 '12 at 12:55
add comment

I use the following in my .bash_profile:

# if not running screen, attached to a terminal and is myusername (not run through sudo)
if [ -z "${STY}" -a -t 0 -a X${USER} = Xmyusername ]; then
    # function to re/attach to screen
    reattach () {
        # if Agent Forwarding is active, set up a mechanism to update the socket
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-screen"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-screen" export SSH_AUTH_SOCK
        fi
        # replace the login shell with screen
        exec screen -A -D -RR ${1:+"$@"} ;
    }
    # remove any defunct sessions
    screen -wipe
    echo 'starting screen... (type Cntl-C to abort)'
    sleep 5 && reattach
fi

This creates a unique session that I reattach to at login. It waits 5 seconds in case I want just a shell. Change the myusername in the first if clause.

share|improve this answer
    
I like this - a couple notes: 1. A space should be added to: 'Xmyusername ]' 2. Might want to mention to change 'myusername' to the user's actual username. –  jmohr Jan 2 '12 at 17:20
    
Thanks; actually, I copy&pasted it from another answer, so I'll have to fix that one as well. –  Arcege Jan 2 '12 at 17:24
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.