I think you need autossh. I've been using it for years now, and combined with screen it makes all my terminal sessions completely portable and transparent. I simply close lappy, move to new location, open lappy and all my screens and nested screens connect automatically. I don't even think about it anymore.
is the basics... I ruby'd up a lil script to automate the process in my .screenrc for a given host. ( also does my ssh forwarding, so in all these different places i can tunnel my connection through my servers )
in the autossh distro there should be a program called rscreen ( and.. there is! )
# sample script to use autossh to open up a remote screen
# session, or reconnect to an existing one.
# $Id: rscreen,v 1.4 2002/05/07 17:54:13 harding Exp $
if [ "X$1" = "X" ]; then
echo "usage: `basename $0` <host>"
if [ "X$SSH_AUTH_SOCK" = "X" ]; then
eval `ssh-agent -s`
export AUTOSSH_POLL AUTOSSH_LOGFILE AUTOSSH_DEBUG AUTOSSH_PATH AUTOSSH_GATETIME
autossh -M 20004 -t $1 "screen -e^Zz -D -R"
This should help with ssh/screen problems
Finally, in order to keep my ssh-agent running , I use keychain, since I am kind of a shell head... I think OSX has something available to keep your agent around ...