我一直在阅读有关如何在连接到远程服务器时自动启动屏幕的信息。我希望在连接到远程服务器时ssh
添加一行简单的代码来.bash_profile
启动屏幕,并在断开屏幕连接时不退出远程连接。screen
ssh
我一直在研究、和exec screen
的几乎所有组合-d
,-r
但无法弄清楚我需要什么标志。-D
-R
理想情况下,我会ssh whatever
在新的屏幕上键入并登录服务器,screen
或者它可以重新连接旧屏幕,我想知道如何同时执行这两项操作,看看我更喜欢哪个。然后我可以键入Ctrl ad或Ctrl d并让它将我带回到ssh
该服务器的正常登录(您将在其中看到 motd)。从那里我可以screen -r
返回到我想要的任何屏幕,或者Ctrl d再次点击以注销。
答案1
简单一点screen -R
就可达到目的。
为了验证这一点,我screen -R
在远程服务器上添加了 .bash_profile,登录后与屏幕分离,然后返回到远程服务器上的正常 shell 提示符。还使用 .bashrc 进行了验证。后续登录产生了预期结果(重新连接到屏幕会话)。
答案2
screen -RR
将重新连接到第一个可用会话或者在必要时创建一个会话。
答案3
使用某些解决方案启动新窗口或屏幕会话时,我遇到了创建 40 个级联屏幕会话的问题。如果不存在级联屏幕,我可以消除级联屏幕并创建一个新会话:
if [ -z "$STY" ]; then screen -R; fi
它会测试您是否处于 Screen 会话中,screen -R
如果不处于该会话中,则会运行。如果不进行测试,每次创建新的 Screen 窗口时,您都会收到 Screen 发出的“从 Screen 内部附加?”警告。
答案4
如果您想在通过 SSH 连接时自动连接到屏幕会话,请将以下代码添加到您的.bash_profile
或您.bashrc
的远程计算机上,它将:
- 每次通过 SSH 连接时都启动一个新的屏幕会话。
- 重复使用现有的分离的screen 会话,总是从最新的会话开始。如果没有可用的分离会话,则会启动一个新的。
- 当您打开到您的机器的多个 SSH 连接时,您将获得不同的屏幕会话,因为我们只重新使用分离的会话。
- 如果你将脚本添加到你的
.bashrc
脚本如下:
#!/bin/bash
#
# Attaches to the first Detached Screen. Otherwise starts a new Screen.
# Only run if we are not already inside a running screen and only if in an SSH session.
if [[ -z "${STY}" && ! -z "${SSH_CLIENT}" ]]; then
detached_screens=($(screen -ls | grep pts | grep -v Attached))
for screen in "${detached_screens[@]}"; do
if [[ "${screen}" == *".pts"* ]]; then
IFS='.pts' read -ra split <<< "${screen}"
for id in "${split[@]}"; do
first_id="${id}"
break
done
break
fi
done
screen -R $first_id
fi
PS:如果您想为本地终端启用此功能,请&& ! -z "${SSH_CLIENT}
在第一行删除。