Closed nep-0 closed 2 years ago
你是用了 msys2 或者 cygwin 的 ssh 吧?这些从 linux 直接迁移过来的 ssh 有问题导致的。
windows 有一个自带的 OpenSSH ,是专门针对 windows 进行修改过的,使用 C:\Windows\System32\OpenSSH\ssh.exe
这个就可以了。
也可以参考 https://github.com/trzsz/trzsz-go/issues/4#issuecomment-1148591047 另外安装个新版本。
用了 C:\Windows\System32\OpenSSH\ssh.exe
,成功了一次,后来还是报错。
PS C:\Users\xxx> trzsz C:\Windows\System32\OpenSSH\ssh.exe ubuntu@62.xxx.xxx.xxx
ubuntu@62.xxx.xxx.xxx's password:
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-77-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Sat 09 Jul 2022 09:32:21 AM CST
System load: 0.xx
Usage of /: xx% of xxGB
Memory usage: xx%
Swap usage: xx%
Processes: xx
Users logged in: xx
IPv4 address for br-29a132d78afa: 172.xxx.xxx.xxx
IPv4 address for cni0: 10.xxx.xxx.xxx
IPv4 address for docker0: 172.xxx.xxx.xxx
IPv4 address for eth0: 172.xxx.xxx.xxx
Last login: Sat Jul 9 09:31:38 2022 from 117.xxx.xxx.xxx
ubuntu@VM-16-6-ubuntu:~$ trz
Received xxx.json to /home/ubuntu
ubuntu@VM-16-6-ubuntu:~$ trz
illegal base64 data at input byte 40
goroutine 1 [running]:
runtime/debug.Stack()
/usr/lib/go-1.18/src/runtime/debug/stack.go:24 +0x65
github.com/trzsz/trzsz-go/trzsz.NewTrzszError({0xc00001a0c0, 0x40}, {0xc0000122f8, 0x4}, 0x1)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/comm.go:171 +0x272
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvCheck(0xc000041ca0?, {0x55616b, 0x4}, 0x1?, 0x1?)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:197 +0x152
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvString(0xc00004a240?, {0x55616b?, 0xc?}, 0x0?)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:231 +0x25
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvExit(...)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:391
github.com/trzsz/trzsz-go/trzsz.recvFiles(0xc00004a240?, 0xc000060cc0, 0x1e?, 0x3?)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/trz.go:95 +0x348
github.com/trzsz/trzsz-go/trzsz.TrzMain()
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/trz.go:172 +0x865
main.main()
/build/trzsz-z81gqQ/trzsz-0.1.8/cmd/trz/main.go:33 +0x19
ubuntu@VM-16-6-ubuntu:~$ trz
illegal base64 data at input byte 28
goroutine 1 [running]:
runtime/debug.Stack()
/usr/lib/go-1.18/src/runtime/debug/stack.go:24 +0x65
github.com/trzsz/trzsz-go/trzsz.NewTrzszError({0xc00001a240, 0x40}, {0xc000012950, 0x4}, 0x1)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/comm.go:171 +0x272
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvCheck(0xc000037400?, {0x55619b, 0x4}, 0x30?, 0x7f0022cdd090?)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:197 +0x152
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvInteger(0x10?, {0x55619b?, 0xc000010be0?}, 0x0?)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:208 +0x25
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvFileSize(0xc000010be0?, {0x0?, 0x0})
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:751 +0x3f
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvFiles(0xc00004a240, {0xc0000127b0, 0xc}, {0x0?, 0x0})
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:829 +0x4ef
github.com/trzsz/trzsz-go/trzsz.recvFiles(0xc00004a240?, 0xc000060cc0, 0x1e?, 0x3?)
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/trz.go:90 +0x312
github.com/trzsz/trzsz-go/trzsz.TrzMain()
/build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/trz.go:172 +0x865
main.main()
/build/trzsz-z81gqQ/trzsz-0.1.8/cmd/trz/main.go:33 +0x19
看看 ssh 是什么版本的 C:\Windows\System32\OpenSSH\ssh.exe -V
?
或者从 https://github.com/PowerShell/Win32-OpenSSH/releases 这里下载个新的 ssh 试试?
如果还是不行,看来我要抽空装个 Windows 11 看看( 我现在用的是 Window 10 )。
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
ssh 版本跟我的一样的,看来我要抽空搞个 Windows 11 看看了。
@nep-0 方便抓一下日志,发到我的邮箱不?
1、trzsz -t C:\Windows\System32\OpenSSH\ssh.exe ubuntu@62.xxx.xxx.xxx
登录,注意加上 -t
。
2、在服务器上执行 echo -e '\x3CENABLE_TRZSZ_TRACE_LOG\x3E'
,你会看到输出一个日志路径( 在 windows 上的 )。
3、执行 trz
上传一个可以公开的文件,复现出错误来。
4、在服务器上执行 echo -e '\x3CDISABLE_TRZSZ_TRACE_LOG\x3E'
会停止写日志,并且会再次输出日志路径。
5、在 windows 上找到日志文件,发送到我的邮箱 lonnywong@qq.com 。
已发送。
感谢!
分析了下:
服务端输出的是 #SUCC:eJzy8XR29Qt21TMCBAAA//8MnwJk!
,经过了 windows 的 PowerShell,分了三次输出:
\r\n\x1b[90C
#SUCC:eJzy8XR29Qt21TMCBAAA//8
\r\n\x1b[25;119H8MnwJk!\r\n\x1b[6C
这其实是多了一些 vt100 的控制字符,一般以 \x1b[
开头,以某个字母结束,如 \x1b[25;119H
。
我把这些多出来的东西做了过滤,得到了 #SUCC:eJzy8XR29Qt21TMCBAAA//88MnwJk!
,比服务端的真实输出多了一个 8
,所以导致了报错。
我也不懂怎么样还原出服务端真实的输出了,不知道为什么会重复输出了 8
。
关于 vt100 可以网上搜一下,https://en.wikipedia.org/wiki/ANSI_escape_code
可能是 Windows 或者 PowerShell 的 bug 。可以试试其他的终端:
1、cmd
,用法和 PowerShell 相同。
2、cygwin
,用法:trzsz "C:\Windows\System32\OpenSSH\ssh.exe" x.x.x.x
3、MSYS2
或 git bash
,用法:winpty trzsz /c/Windows/System32/OpenSSH/ssh.exe x.x.x.x
@nep-0
可以编译一个最新的看看(做了一些调整,不知有没有用):
git clone https://github.com/trzsz/trzsz-go.git
cd trzsz-go
GOOS=windows go build ./cmd/trzsz
trzsz.exe
就在当前 trzsz-go 目录下。
我安装 Win11 研究了一下规律,发现每输出一行都会将光标移到上一行的行末,然后重复输出一个字符。
我把那重复的字符过滤掉之后,本地测试是解决了。
可以自己编译一个 trzsz.exe
试试看。
git clone https://github.com/trzsz/trzsz-go.git
cd trzsz-go
go build ./cmd/trzsz
v0.1.9
已解决。
服务端 OS:
Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-77-generic x86_64)
服务端版本:trzsz-go 0.1.8
客户端 OS:
Windows 11 Professional 21H2
客户端版本:trzsz-go 0.1.8