当我 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
请注意,您必须使用-t
with 来ssh
强制伪终端分配,才能screen
以这种方式启动。
远程主机上的别名可能是 forscreen -d
或detach='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
. - 使用prefixd或
tmux detach-client
或tmux detach
来分离。
答案2
当您执行屏幕命令来调用或创建屏幕时, 后 你添加了你的父shell的aa Kill,这样你就会终止你的ssh连接。
如果父进程是 bash,则终止我的父进程的示例
kill $( ps -ax -o pid,ppid,args | grep "^$$ " | grep bash | awk '{print $2} ' )