AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 19634
Accepted
palehorse
palehorse
Asked: 2009-06-05 05:04:00 +0800 CST2009-06-05 05:04:00 +0800 CST 2009-06-05 05:04:00 +0800 CST

如何重新连接到断开连接的 ssh 会话

  • 772

有没有办法连接到断开的 ssh 会话?我们与正在单独处理的远程站点的网络连接出现问题;但是,与此同时,在连接到远程位置的服务器时,由于丢失数据包,我们会遇到大量断开连接。很多时候会话会保持活动状态,有时它恰好处于某些操作(文件编辑、运行某些进程等)的中间,我需要返回而不是重新启动(如果可能的话)。

linux ssh gnu-screen
  • 15 15 个回答
  • 325060 Views

15 个回答

  • Voted
  1. zero_r
    2009-06-05T05:08:54+08:002009-06-05T05:08:54+08:00

    尝试将 ClientAliveInterval(例如 60)和 TCPKeepAlive(是或否)设置为服务器端 sshd.conf 上的适当值。

    即使连接丢失了几分钟,这也应该使您的会话保持活动状态。

    • 171
  2. Best Answer
    kbyrd
    2009-06-05T05:08:27+08:002009-06-05T05:08:27+08:00

    更新:有关实际答案,请参见下面 zero_r 的答案

    这不是答案,而是一种解决方法。使用屏幕。

    首次登录时,运行屏幕。你得到另一个shell,在其中运行命令。如果您断开连接,屏幕进程会保持终端处于活动状态,这样您的 shell 和它正在运行的进程就不会崩溃。重新连接时,运行“screen -r”以恢复。

    配置和使用屏幕还有很多其他内容,但以上内容应该可以解决您的问题。

    • 154
  3. Mike Pountney
    2009-06-05T05:19:07+08:002009-06-05T05:19:07+08:00

    如上所述,GNU Screen是要走的路。它允许您在远程机器上进行“屏幕会话”,您可以通过多个“屏幕窗口”在其中运行多个命令。如果您的父 SSH 连接断开,这将简单地分离,保持所有子进程在其中运行并且正常运行。

    man screenscreen像往常一样是你的朋友,如果默认没有安装,应该调用OS包。

    基础是:

    • 启动屏幕会话(在您的远程主机上):

        $ screen
      
    • 断开与屏幕会话的连接:CTRL-A,d

    • 重新登录后重新连接到您的屏幕会话:

        $ screen -d -r
      
    • 打开另一个屏幕“窗口”:CTRL-A,c

    • 循环浏览您打开的屏幕窗口:CTRL-A,space

    你可以用屏幕做很多很酷的事情。我已经使用它超过 10 年了,我仍在寻找新功能。这是我最喜欢的 Unix 实用程序。

    • 71
  4. jwbensley
    2013-11-25T05:01:55+08:002013-11-25T05:01:55+08:00

    我不敢相信没有人提到过MOSH;

    Mosh 是一个单独的协议,可以挂钩到 SSH 登录过程,它可以在断开连接、更改 IP、高延迟等几天后保持您的会话活动。它在主页上的解释比我能解释的要好,所以我复制了下面的描述。我的经验和建议是我在我的 Android 手机上使用它,它是旅行和 SSH 时的救星。例如,在火车上与手机连接时,我的笔记本电脑也是如此。我建议从源代码编译以获得最新版本,我在 Ubuntu 中的 repo 版本有一些烦恼,这些烦恼已在最新版本中修复(在撰写本文时)。

    Mosh(手机壳)

    允许漫游的远程终端应用程序,支持间歇性连接,并提供智能的本地回声和用户击键的线路编辑。

    Mosh 是 SSH 的替代品。它更加强大和响应迅速,尤其是在 Wi-Fi、蜂窝和长距离链路上。

    Mosh 是免费软件,可用于 GNU/Linux、FreeBSD、Solaris、Mac OS X 和 Android。

    来自网站的功能:

    • 换IP。保持连接:当您在 Internet 连接之间移动时,Mosh 会自动漫游。在火车上使用 Wi-Fi,在酒店使用以太网,在海滩上使用 LTE:您将保持登录状态。大多数网络程序在漫游后会失去连接,包括 SSH 和 Gmail 等 Web 应用程序。莫什不同。

    • 美梦成真:使用 Mosh,您可以让您的笔记本电脑进入睡眠状态,稍后再将其唤醒,从而保持您的连接完好无损。如果您的 Internet 连接中断,Mosh 会警告您 — 但当网络服务恢复时连接会恢复。

    • 摆脱网络延迟:SSH 在显示您自己的输入之前等待服务器的回复。这可能会导致糟糕的用户界面。Mosh 不同:它对输入、删除和行编辑提供即时响应。它可以自适应地执行此操作,甚至可以在 emacs 和 vim 等全屏程序中工作。在连接不良的情况下,突出的预测带有下划线,因此您不会被误导。

    • 没有特权代码。无守护进程:您无需成为超级用户即可安装或运行 Mosh。客户端和服务器是由普通用户运行的可执行文件,并且仅在连接的生命周期内持续存在。

    • 相同的登录方法:Mosh 不监听网络端口或验证用户。mosh 客户端通过 SSH 登录到服务器,用户提供与以前相同的凭据(例如,密码、公钥)。然后 Mosh 远程运行 mosh-server 并通过 UDP 连接到它。

    • 在您的终端内运行,但更好:Mosh 是一个命令行程序,如 ssh。您可以在 xterm、gnome-terminal、urxvt、Terminal.app、iTerm、emacs、screen 或 tmux 中使用它。但是 mosh 是从头开始设计的,只支持一种字符集:UTF-8。它修复了其他终端和 SSH 中的 Unicode 错误。

    • Control-C 效果很好:与 SSH 不同,mosh 基于 UDP 的协议可以优雅地处理数据包丢失,并根据网络条件设置帧速率。Mosh 不会填满网络缓冲区,因此 Control-C
      始终可以阻止失控的进程。

    • 58
  5. hayalci
    2009-06-07T01:11:36+08:002009-06-07T01:11:36+08:00

    autossh 监视您的连接,如果它出现故障,它会重新连接。它比keepalives更可靠。如果您连接到屏幕会话,您将从断开连接的位置继续(请参阅rscreenautossh 附带的)

    • 21
  6. Jacksonkr
    2016-04-06T17:24:52+08:002016-04-06T17:24:52+08:00

    多路复用器

    这是一部经典之作。每当您冒着与终端失去连接的风险时使用它。

    $ tmux
    $ sh do_something_that_takes_forever
    
    !! Connection fails so you reconnect once you notice
    
    $ tmux ls
    0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]
    
    $ tmux attach -t 0
    

    就这样,你又开始行动了。

    • 19
  7. wzzrd
    2009-06-05T05:06:11+08:002009-06-05T05:06:11+08:00

    我会安装并启动屏幕来解决您的问题。Screen 将让您重新连接到以前的 screen 会话。

    除此之外,screen 还可以让您做一些很酷的事情,例如拆分屏幕、查看控制台等。您可以在此处和此处找到更多信息。

    对于初学者,如果您断开连接,您可以使用

    screen -ls
    

    查看您的会话和

    screen -r ${session} 
    

    重新连接到断开的一个。

    • 11
  8. march_happy
    2019-08-14T18:08:48+08:002019-08-14T18:08:48+08:00

    有时我也忘记运行屏幕并丢失未完成的工作。在这种情况下,尽管我们无法重新连接到损坏的 SSH 会话,但由于reptyr.

    意外断开 SSH 会话后,首先要运行,screen以免连接再次断开。然后在新会话中运行ps aux | grep {The process to be resumed}以获取 PID。使用 PID,您可以尝试reptyr {PID}或reptyr -T {PID}(如果有子进程)继续工作。

    • 11
  9. David
    2009-06-05T05:33:14+08:002009-06-05T05:33:14+08:00

    如果您的 ssh 会话断开,screen 将使您的 shell 会话在远程服务器上保持打开状态,但它不会对 ssh 连接断开的问题做任何事情。正如 zero_r 建议的那样,尝试使用保持活动和长时间超时来调整您的 ssh 连接。

    我建议您追踪导致问题的丢失数据包的原因并修复它而不是解决它。

    • 3
  10. David Spillett
    2009-06-05T05:47:10+08:002009-06-05T05:47:10+08:00

    这个答案仍然相关, screen 存在,受支持,仍然可以完成工作等,但现在还有其他选择:tmux提供了额外的功能,并且它和 screen 都更常用(根据我的经验)包装在Byobu中。这三个都可以在主要 Linux 发行版的标准存储库中找到。


    正如其他人所指出的,屏幕通常是最好的解决方案,它还添加了许多其他有用的功能。

    您可以在远程计算机上设置您的配置文件以在登录时自动启动和/或重新连接到屏幕,这样您就可以避免在需要时忘记启动屏幕,因为您遭受连接中断。

    请参阅http://tlug.dnho.net/?q=node/239(或在 Google 上搜索许多其他示例,它们的方式略有不同)。

    • 3

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve