SSH连接一直卡在终端

标签 ssh terminal

这是困扰我一年的问题!!!

我需要经常在办公室和家里通过 ssh 连接到我的远程服务器。通常,它在办公室工作得很好。但是在家时,ssh 连接会很快断开(或挂断)。有时当我回来两五分钟时,ssh session 已死,Ctrl+c , Ctrl+zCtrl+d没有效果。

最佳答案

这里有两个问题:

  • SSH session 挂起并且不容易关闭。

  • 原因:普通 key 通过 ssh session 转发,因此它们现在无效。
    解决方案:我们可以使用转义键序列( Enter ~ . )来关闭它。在挂机终端点击Enter ~ ?随后,它将向您显示支持的转义序列列表,如下所示:
    Supported escape sequences:
     ~.   - terminate connection (and any multiplexed sessions)
     ~B   - send a BREAK to the remote system
     ~C   - open a command line
     ~R   - request rekey
     ~V/v - decrease/increase verbosity (LogLevel)
     ~^Z  - suspend ssh
     ~#   - list forwarded connections
     ~&   - background ssh (when waiting for connections to terminate)
     ~?   - this message
     ~~   - send the escape character by typing it twice
    (Note that escapes are only recognized immediately after newline.)
    
  • SSH session 在短时间内挂断。

  • 原因:这可能取决于您的网络类型和路由器。企业路由器比家用路由器更强大,可以保持长期连接。在家里,我们可能只有一个IP地址来自 ISP 和许多设备。通常,家庭路由器为了处理具有一个外部 IP 地址的多个设备,会创建一个 NAT 网络(WIFI)并为每个设备分配一个内部 IP 地址。当您的设备从互联网发送请求和接收响应时,家庭路由器需要维护一个 connection mapping table使所有连接完美运行。但是 connection mapping table很小,当它没有更多的容量时,它会丢弃一些认为死的连接,让新的连接加入。
    解决方案:在 SSH 版本 2 中,有一个“无操作”消息类型 (NOOP),可用于保持 ssh session 处于事件状态。在位于 ~/.ssh/config 的 ssh 配置中添加以下配置默认情况下。
    Host *
      ServerAliveInterval 300
    
    号码300可以根据你的路由器调整。
    希望这可以帮助其他人。
    有没有人有任何其他建议?如果我的理解有误,请纠正我。

    关于SSH连接一直卡在终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57264903/

    相关文章:

    Git - 如何推送文件夹内的每个存储库

    FFMPEG 扫描和转换电影文件并删除原始文件 - 隐居

    maven-2 - Maven使用SSH将本地文件复制到远程服务器

    windows - 系统准备服务器后 Git 远程不工作

    php - 使用 ssh2_scp_send() 发送的文件在远程服务器上不完整

    node.js - 是否可以通过 Node 运行源命令?

    git - 使用预提交搜索文件

    bash - 如何减少ssh连接超时值

    linux - 无法打开与身份验证代理的连接(REVIEW)

    go - 关闭终端中的回显 - Golang