除了使用类似的方法之外screen
,是否有可能在 Linux/UNIX 下“假设”一个活跃的用户会话?
例如,我从家里 ssh 到我的服务器。然后我从工作单位 ssh 到它。我想终止从家里产生的会话,并“接管”它正在运行的所有进程。
warren@home> ssh warren@myserver
warren@myserver> top
...
warren@work> ssh warren@myserver
warren@myserver> <grab-other-session-of-mine>
<grab-other-session-of-mine>
执行命令/工具后,warren@home
应关闭 ssh 会话。
这可能吗?
答案1
据我所知这是不可能的。屏幕或等效物有什么问题?
您的会话中的进程已绑定到其当前 tty 和父进程,更改这些将导致许多严重的问题,因此需要一个抽象层为您的工作进程提供持久的 tty 和父进程。这就是 screen 和 friends 所做的;如果不使用这些,则需要将该功能放入 sshd 本身。
看使用 GNU screen 作为登录“shell”使用屏幕作为登录 shell,这样就无需思考如何运行它。
答案2
首先:是的。只有当您记录了 TCP 会话(不确定这有多大必要,但您需要有权访问数据包捕获)、拥有正确的工具和专业知识、完全控制客户端和服务器之间机器上生成的数据包并有权访问服务器私钥时,您才能执行此操作。您可以接管 TCP 连接,冒充原始客户端,并开始在现有连接上发送和接收数据。
但这样做很愚蠢,而且难度比它本身的价值要大得多,所以实际上,如果不使用像屏幕这样的工具,你就无法做到这一点。