Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

运行 trz 报错 #12

Closed
nep-0 opened this issue Jul 9, 2022 · 12 comments
Closed

运行 trz 报错 #12

nep-0 opened this issue Jul 9, 2022 · 12 comments

Comments

@nep-0
Copy link

nep-0 commented Jul 9, 2022

illegal base64 data at input byte 36
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({0xc00001c240, 0x40}, {0xc0000148cc, 0x4}, 0x1)
        /build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/comm.go:171 +0x272
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvCheck(0xc000039400?, {0x55619b, 0x4}, 0xe0?, 0x7fdc1064d090?)
        /build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:197 +0x152
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvInteger(0x10?, {0x55619b?, 0xc000010bd0?}, 0x0?)
        /build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:208 +0x25
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvFileSize(0xc000010bd0?, {0x0?, 0x0})
        /build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:751 +0x3f
github.com/trzsz/trzsz-go/trzsz.(*TrzszTransfer).recvFiles(0xc00004c240, {0xc0000163c0, 0x13}, {0x0?, 0x0})
        /build/trzsz-z81gqQ/trzsz-0.1.8/trzsz/transfer.go:829 +0x4ef
github.com/trzsz/trzsz-go/trzsz.recvFiles(0xc00004c240?, 0xc000062cc0, 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

服务端 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

@lonnywong
Copy link
Member

你是用了 msys2 或者 cygwin 的 ssh 吧?这些从 linux 直接迁移过来的 ssh 有问题导致的。

windows 有一个自带的 OpenSSH ,是专门针对 windows 进行修改过的,使用 C:\Windows\System32\OpenSSH\ssh.exe 这个就可以了。

也可以参考 #4 (comment) 另外安装个新版本。

@nep-0
Copy link
Author

nep-0 commented Jul 9, 2022

用了 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

@lonnywong
Copy link
Member

看看 ssh 是什么版本的 C:\Windows\System32\OpenSSH\ssh.exe -V ?

或者从 https://github.com/PowerShell/Win32-OpenSSH/releases 这里下载个新的 ssh 试试?

如果还是不行,看来我要抽空装个 Windows 11 看看( 我现在用的是 Window 10 )。

@nep-0
Copy link
Author

nep-0 commented Jul 9, 2022

OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2

@lonnywong
Copy link
Member

ssh 版本跟我的一样的,看来我要抽空搞个 Windows 11 看看了。

@lonnywong
Copy link
Member

@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

@nep-0
Copy link
Author

nep-0 commented Jul 10, 2022

已发送。

@lonnywong
Copy link
Member

感谢!

分析了下:
服务端输出的是 #SUCC:eJzy8XR29Qt21TMCBAAA//8MnwJk!,经过了 windows 的 PowerShell,分了三次输出:

  1. \r\n\x1b[90C
  2. #SUCC:eJzy8XR29Qt21TMCBAAA//8
  3. \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

我的处理代码:

trzsz-go/trzsz/buffer.go

Lines 160 to 170 in 2b984b8

for _, c := range buf {
if skipVT100 {
if isVT100End(c) {
skipVT100 = false
}
} else if c == '\x1b' {
skipVT100 = true
} else if isTrzszLetter(c) {
b.readBuf.WriteByte(c)
}
}

@lonnywong
Copy link
Member

可能是 Windows 或者 PowerShell 的 bug 。可以试试其他的终端:

1、cmd ,用法和 PowerShell 相同。

2、cygwin,用法:trzsz "C:\Windows\System32\OpenSSH\ssh.exe" x.x.x.x

3、MSYS2git bash,用法:winpty trzsz /c/Windows/System32/OpenSSH/ssh.exe x.x.x.x

@lonnywong
Copy link
Member

@nep-0

可以编译一个最新的看看(做了一些调整,不知有没有用):

git clone https://github.com/trzsz/trzsz-go.git
cd trzsz-go
GOOS=windows go build ./cmd/trzsz

trzsz.exe 就在当前 trzsz-go 目录下。

@lonnywong
Copy link
Member

我安装 Win11 研究了一下规律,发现每输出一行都会将光标移到上一行的行末,然后重复输出一个字符。

我把那重复的字符过滤掉之后,本地测试是解决了。

可以自己编译一个 trzsz.exe 试试看。

git clone https://github.com/trzsz/trzsz-go.git
cd trzsz-go
go build ./cmd/trzsz

@lonnywong
Copy link
Member

v0.1.9 已解决。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants