当我退出(并终止 ssh)时分离屏幕的别名

当我退出(并终止 ssh)时分离屏幕的别名

当我 ssh 到我自己的服务器上时,我会自动启动 gnu screen。当我完成后,我必须分离。然后exit退出ssh。这意味着当我在某个时间点再次 ssh 进入服务器时,我可以从上次中断的地方继续。

我可以创建一个别名(例如)来(从屏幕内)分离并删除 ssh 吗?

答案1

screen登录远程主机时启动(在本地机器上执行):

ssh -t user@host screen

在屏幕会话中,在远程主机上,分离并注销(这将结束 SSH 会话,除非您使用控制套接字使用持久连接(即使用in 的ControlMaster设置)):ControlPersist~/.ssh/config

screen -d

稍后,登录并重新附加:

ssh -t user@host screen -r

请注意,您必须使用-twith 来ssh强制伪终端分配,才能screen以这种方式启动。

远程主机上的别名可能是 forscreen -ddetach='screen -d'类似的名称。

在本地主机上,您的~/.ssh/config文件中可能有一个部分说

Host *-screen
    RequestTTY force
    RemoteCommand screen -d -R

Host myhost myhost-screen
    HostName myhost.somedomain.example.com
    User myname

然后,每当你使用

ssh myhost-screen

screen将在指定主机上创建(或重新附加)会话,同时

ssh myhost

不会使用screen

注意:RemoteCommand已在 OpenSSH 7.6 (2017-10-03) 中添加。


为了tmux

  • 使用tmux new-session -A -s "%n"in~/.ssh/config代替screen -d -R.
  • 使用prefixdtmux detach-clienttmux detach来分离。

答案2

当您执行屏幕命令来调用或创建屏幕时, 你添加了你的父shell的aa Kill,这样你就会终止你的ssh连接。

如果父进程是 bash,则终止我的父进程的示例

kill $( ps -ax -o pid,ppid,args | grep "^$$ " |  grep bash | awk '{print $2} ' )

相关内容