mar*_*usw 18 linux ssh debian gnu-screen bashrc
我想使用 screen 使 ssh 会话在我的服务器上保持活动状态。如果我可以在登录时为我的用户自动恢复任何正在运行的会话,那就太好了。这样做的直接方法是将“screen -r”添加到我的 .bashrc 中,这似乎工作正常。我只是想知道这是否会在我尚未测试的条件下破坏任何东西。任何有经验的人都可以告诉我这是否是我应该做的?
Gil*_*il' 21
screen -R -d如果存在会话,您需要自动附加到现有会话,否则创建会话。
确保您只在交互式 shell 上执行此操作。~/.bashrc当其父进程是 rshd 或 sshd 时,即使是非交互式 shell 的Bash 源(文档中提到了这一点,但很容易错过)。您可以判断 shell 是交互式的,因为$-包含i.
case $- in
*i*) screen -Rd;;
esac
Run Code Online (Sandbox Code Playgroud)
这不会轻易让您在不同的终端中运行不同的屏幕会话。
您需要从屏幕上分离,然后退出父 shell 以注销。这可以通过使用exec screen代替来解决screen。
如果您启动一个非登录 shell 的 shell,您将进入 screen,这在大多数情况下不是您想要的。我至少会将此限制在您直接在交互式 ssh 会话中运行时,在您的 ssh 会话中包含以下内容~/.bash_profile:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Run Code Online (Sandbox Code Playgroud)
当你做复杂的事情时要小心,.bashrc因为导致 shell 退出的错误会使登录变得困难。
我的建议是不要修改服务器上的 shell 初始化文件,而是从客户端显式运行 screen,如
ssh -t host.example.com screen -R -d
Run Code Online (Sandbox Code Playgroud)
(您可能会在客户端上创建 shell 别名或桌面环境快捷方式。)这样您就可以轻松选择不运行 screen、指定备用会话名称等。
| 归档时间: |
|
| 查看次数: |
7854 次 |
| 最近记录: |