我只在我的 vps 上一直运行的 screen 会话中工作。当我通过 ssh 连接到此服务器时,我会使用 bash 别名重新连接它
alias screenr='screen -r -d'
我想要的是:
连接到服务器并自动重新连接会话。
我尝试过的:
screen -r
在我的 .bashrc 末尾添加内容会导致屏幕显示一条信息消息,提示我已加入会话。
有什么想法吗,或者我只是错过了手册页上的一个参数?
答案1
尝试使用 ssh 配置文件 (~/.ssh/config),而不是 bashrc。您可以将其更改为在登录时运行命令。例如:
Host some_alias
Hostname your_vps.dyndns.org
Port 22
User some_user
PermitLocalCommand yes
LocalCommand screen -dRR screen_session_name
然后你要做的就是ssh 某个别名您将自动重新连接到您的屏幕会话,名称为screen_session_name(如果不存在则创建它)。
编辑:顺便说一下,这发生在您的本地机器上,而不是您的服务器上。
答案2
我在我的.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
这将创建一个唯一的会话,我将在登录时重新连接到该会话。如果我只需要 shell,它将等待 5 秒钟。myusername
在第一if
个子句中更改。