3

问题

client$ task sync
Syncing with <hostname>.localdomain:53589

Handshake failed. The TLS connection was non-properly terminated.
Sync failed. Could not connect to the Taskserver

TL;DR 我很确定这不是证书的问题,而是更可能与跨 WSL 实现的客户端/服务器交互有关。我可以通过 telnet 和 netcat 进行连接,但是当我尝试从客户端同步时,任务调试器没有收到任何信息。但是,我可以从与服务器位于同一台机器上的客户端同步。如果有人可以分享有关如何进步或一些调试技巧的建议,我将非常感激!

设置

服务器

操作系统:Ubuntu 20.04 LTS(在 WSL、Windows 10 中运行)

逐字记录的结果$hostname -f称为<hostname>.localdomain

私有IP:192.168.1.20

server$ taskd diagnostics

taskd 1.1.0
    Platform: Linux
    Hostname: <hostname>

Compiler
     Version: 9.3.0
        Caps: +stdc +stdc_hosted +200809 +200809 +LP64 +c8 +i32 +l64 +vp64 +time_t64
  Compliance: C++11

Build Features
       Built: Jun 16 2020 14:36:11
       CMake: 3.16.3
     libuuid: libuuid + uuid_unparse_lower
   libgnutls: 3.6.13
  Build type: release

Configuration
   TASKDDATA: /var/taskd
        root: /var/taskd (readable)
      config: /var/taskd/config (readable)
          CA: /var/taskd/ca.cert.pem (readable)
 Certificate: /var/taskd/server.cert.pem (readable)
         Key: /var/taskd/server.key.pem (readable)
         CRL: /var/taskd/server.crl.pem (readable)
         Log: /var/log/taskd.log (found)
    PID File: /home/rob/taskd.pid (found)
      Server: <hostname>.localdomain:53589
 Max Request: 1048576 bytes
     Ciphers:
       Trust: allow all

客户

这是一台物理上与服务器不同的机器,在同一个 LAN 上

操作系统:Ubuntu 20.04 LTS(在 WSL、Windows 10 中运行)

client$ task diagnostics

task 2.5.1
   Platform: Linux

Compiler
    Version: 9.2.1 20200306
       Caps: +stdc +stdc_hosted +LP64 +c8 +i32 +l64 +vp64 +time_t64
 Compliance: C++11

Build Features
      CMake: 3.16.3
    libuuid: libuuid + uuid_unparse_lower
  libgnutls: 3.6.11
 Build type: None

Configuration
       File: /home/rob/.taskrc (found), 1622 bytes, mode 100666
       Data: /home/rob/.task (found), dir, mode 40755
    Locking: Enabled
         GC: Enabled
     Server: B160227-RBC.localdomain:53589
      Trust: allow all
Certificate: /home/rob/.task/rob_home.cert.pem, readable, 4015 bytes
        Key: /home/rob/.task/rob_home.key.pem, readable, 24742 bytes
    Ciphers: NORMAL
      Creds: Public/Rob Home/************************************

Hooks
     System: Enabled
   Location: /home/rob/.task/hooks
             (-none-)

Tests
      $TERM: xterm-256color (346x102)
       Dups: Scanned 0 tasks for duplicate UUIDs:
             No duplicates found
 Broken ref: Scanned 0 tasks for broken references:
             No broken references found

故障排除

  • 我已阅读以下内容

  • 而且我一直在尝试用谷歌搜索我遇到的问题,但还没有找到任何可以解决我的具体问题的东西。

  • 由于我自己的调试,系统目前处于以下状态:

    • 禁用防火墙(服务器、客户端和路由器)
    • taskd.trust = 允许所有(客户端和服务器)
  • 从客户端,我可以通过 telnet 连接到服务器:

client$ telnet <hostname>.localdomain 53589
Trying 192.168.1.20...
Connected to <hostname>.localdomain.
Escape character is '^]'.
  • 我还可以在同一个端口上使用 netcat 设置一个简单的“聊天服务器”。
server$ nc -vv -l 192.168.1.20 53589
Listening on 192.168.1.20 53589

然后运行

client$ nc -vv 192.168.1.20 53589
Connection to 192.168.1.20 53589 port [tcp/*] succeeded!

我在服务器上收到以下消息...

Connection received on 192.168.1.19 53885

我觉得奇怪的是通过端口 53885 接收到连接 - 它不应该来自客户端计算机上的 53589 吗?

  • 我尝试使用taskd server --data $TASKDDATA. 由此,我能够从服务器机器上的第二个客户端成功连接,并在日志中查看结果。但是,当我task sync从客户端计算机运行时,没有任何显示。

  • 我检查了特定于"Handshake Failed"的页面,结果如下:

client$ openssl s_client -CAfile .task/ca.cert.pem -host 192.168.1.20 -port 53589
CONNECTED(00000003)

当我在服务器上生成证书时,在 ~/taskd-1.1.0/pki/vars CN=.localdomain 中。

server$ certtool -i < server.cert.pem | grep Subject:
        Subject: O=Göteborg Bit Factory,CN=<hostname>.localdomain
  • lsof -i TCP:53589 -s TCP:LISTEN我从运行or中根本没有得到任何响应netstat -tl | grep 53589,但我认为这更多地与在 WSL 上运行服务器的复杂性有关。

到目前为止的结论

从服务器的调试日志来看,我猜taskwarrior客户端根本“看不到”taskserver。但让我感到困惑的是,我已经验证客户端和服务器机器可以通过正确的端口进行通信(#53589)。

我已经在这里待了几天了,我很确定我一定遗漏了一些明显的东西。任何指导都会非常非常感谢!

4

0 回答 0