ssh 登录时自动启动屏幕

ssh 登录时自动启动屏幕

我一直在阅读有关如何在连接到远程服务器时自动启动屏幕的信息。我希望在连接到远程服务器时ssh添加一行简单的代码来.bash_profile启动屏幕,并在断开屏幕连接时不退出远程连接。screenssh

我一直在研究、和exec screen的几乎所有组合-d-r但无法弄清楚我需要什么标志。-D-R

理想情况下,我会ssh whatever在新的屏幕上键入并登录服务器,screen或者它可以重新连接旧屏幕,我想知道如何同时执行这两项操作,看看我更喜欢哪个。然后我可以键入Ctrl adCtrl 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}在第一行删除。

相关内容