我想使用屏幕使ssh会话在服务器上保持活动状态。如果我可以在登录时自动为用户恢复任何正在运行的会话,那将是很好的选择。执行此操作的直接方法是将“ screen -r”添加到我的.bashrc中,这似乎可以正常工作。我只是想知道这是否会在我尚未测试的条件下破坏任何东西。有经验的人可以告诉我这是否是我应该做的吗?
screen -R -d
如果存在一个会话,则您都需要自动将它们都附加到一个现有会话上,否则,都需要创建一个会话。
确保仅在交互式shell上执行此操作。当bash~/.bashrc
的父进程为rshd或sshd时,它甚至可以提供非交互式shell的Bash源(在文档中已经提到了,但是很容易错过)。您可以说一个shell是交互式的,因为$-
包含i
。
case $- in
*i*) screen -Rd;;
esac
这不会轻易让您在不同的终端上运行不同的屏幕会话。
您需要与屏幕分离,然后退出父Shell退出。可以使用exec screen
代替来解决screen
。
如果启动除登录Shell之外的其他Shell,您将进入屏幕,这在大多数情况下不是您想要的。我至少将这种情况限制为当您直接在交互式ssh会话中运行时,您的内容如下所示~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
当您执行复杂的操作时要当心,.bashrc
因为导致外壳退出的错误将使登录变得困难。
我建议不要在服务器上修改外壳初始化文件,而应从客户端显式运行屏幕,如下所示:
ssh -t host.example.com screen -R -d
(您可能会在客户端上创建shell别名或桌面环境快捷方式。)这样,您可以轻松选择不运行屏幕,指定备用会话名称等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句