问题
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)。
我已经在这里待了几天了,我很确定我一定遗漏了一些明显的东西。任何指导都会非常非常感谢!