-
-
Notifications
You must be signed in to change notification settings - Fork 92
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
win11下使用ProxyCommand指令会提示ssh: handshake failed,微软自带的openssh正常 #46
Comments
这是完整的debug信息,另外我试过把生成的私钥改成2048位的也还是报错,btw, 我把ProxyCommand指令注释掉tssh马上就正常可以连接了。 |
1、目录含有空格时,前后加双引号试试,如 |
|
openssh 可以,也是用 |
ProxyCommand C:\Program Files (x86)\Nmap\ncat.exe --verbose --proxy-type http --proxy 127.0.0.1:7890 %h %p 在openssh下面,这两个都可以哈~ |
没有双引号,并且路径名中没有空格,应该就可以。 |
刚刚试了一下把空格和双引号都去掉了,现在正常了,哈哈,好神奇,什么原因~ |
Line 639 in 7891a1c
含有双引号时,这行代码没有执行成功,我也还不知是什么原因。 |
@supersu097 main 分支的代码应该支持双引号了。如果路径名含有空格,需要加上双引号。 在下个版本发布前,可以自己编译,也可以这样安装(
|
@lonnywong 刚试了一下有空格的情况下,openssh加不加双引号都正常,tssh加或者不加都不行哈 |
你是不是这样加的 |
是的 |
我测试是这样配置的 你用 go 编译下面这段代码,运行看输出什么? package main
import (
"fmt"
"os/exec"
"syscall"
)
func main() {
// 把 %h 和 %p 替换成真实的 IP 和端口,tssh --debug 会看到替换的值。
command := `"C:\Program Files (x86)\Nmap\ncat.exe" --verbose --proxy-type http --proxy 127.0.0.1:7890 %h %p`
cmd := exec.Command("cmd.exe")
cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: fmt.Sprintf("/c %s", command)}
var out, err bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &err
if err := cmd.Run(); err != nil {
fmt.Printf("err: %v\n", err)
}
fmt.Printf("stdout: %s\n", out.String())
fmt.Printf("stderr: %s\n", err.String())
} |
收到,我今天晚上下班后回家部署一下golang环境,然后直接go run一下应该也行是吧,或者我在wsl里面交叉编译一下,不想在宿主机器上再装golang了 |
|
import bytes好像漏了,我加上去了,编译过去了,现在输出了下面的东西:
|
手工执行那个命令,是输出什么呢? |
手工执行那个带空格的完整路径的命令,ps会报语法错误,暂时不知道怎么解决,cd到那个路径下的输出如下:
|
手工 感觉 openssh 是没用上代理,但也没有报错, |
会报下面的错误:
ssh的输出里面表明走了代理:
|
在 |
更新一下测试代码( 正常应输出 package main
import (
"bytes"
"fmt"
"os"
"os/exec"
"syscall"
"time"
)
func main() {
// 把 %h 和 %p 替换成真实的 IP 和端口,tssh --debug 会看到替换的值。
command := `"C:\Program Files (x86)\Nmap\ncat.exe" --verbose --proxy-type http --proxy 127.0.0.1:7890 %h %p`
cmd := exec.Command("cmd.exe")
cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: fmt.Sprintf("/c %s", command)}
var out, err bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &err
go func() {
time.Sleep(3 * time.Second)
fmt.Println("timeout")
if err := cmd.Process.Kill(); err != nil {
fmt.Printf("kill error: %v\n", err)
}
fmt.Printf("stdout: %s\n", out.String())
fmt.Printf("stderr: %s\n", err.String())
os.Exit(0)
}()
if err := cmd.Run(); err != nil {
fmt.Printf("run error: %v\n", err)
}
fmt.Printf("stdout: %s\n", out.String())
fmt.Printf("stderr: %s\n", err.String())
} |
另一个测试: package main
import (
"bytes"
"fmt"
"os"
"os/exec"
"time"
"golang.org/x/sys/windows"
)
func main() {
// 把 %h 和 %p 替换成真实的 IP 和端口,tssh --debug 会看到替换的值。
command := `"C:\Program Files (x86)\Nmap\ncat.exe" --verbose --proxy-type http --proxy 127.0.0.1:7890 %h %p`
argv, err := windows.DecomposeCommandLine(command)
if err != nil {
fmt.Printf("DecomposeCommandLine error: %v\n", err)
return
}
for i, arg := range argv {
fmt.Printf("argv[%d] = %v\r\n", i, arg)
}
cmd := exec.Command(argv[0], argv[1:]...)
var outb, errb bytes.Buffer
cmd.Stdout = &outb
cmd.Stderr = &errb
go func() {
time.Sleep(3 * time.Second)
fmt.Println("timeout")
if err := cmd.Process.Kill(); err != nil {
fmt.Printf("kill error: %v\n", err)
}
fmt.Printf("stdout: %s\n", outb.String())
fmt.Printf("stderr: %s\n", errb.String())
os.Exit(0)
}()
if err := cmd.Run(); err != nil {
fmt.Printf("run error: %v\n", err)
}
fmt.Printf("stdout: %s\n", outb.String())
fmt.Printf("stderr: %s\n", errb.String())
} |
你是说这种命令不兼容powershell是吗,晚点我试一下cmd |
上面两个新的测试代码,我晚点编译一下试试 |
这个输出了下面的东西:
|
这一个输出如下:
|
奇怪了,怎么都没有输出 |
我晚点再用那个试一下,到时候我也加上空格试一下~ |
换成connect.exe,现在正常了,如下:
不过上面多出来一个timeout不知道是咋回事 |
timeout是正常的 |
@supersu097 你是要两个 proxycommand 同时运行, 还是只要运行一个? |
任意一个就行,只要能连就行,不挑的🤣 |
ncat 把 --proxy-type 改为 socks5 试试? |
现在输出了下面的内容:
|
看来 ncat 启动后很快就自动退出了,正常应该输出 |
手动在终端执行命令会出现等待输入的状态 |
我自己安装了一个 ncat ,测试发现是可以的,结果:
|
哦哦,会不会是我电脑上装的火绒杀毒软件给拦截了呀,不过我不知道怎么设置白名单~ |
临时退出它,再试试? |
刚退出了还是不行,我看网上有一篇博客说可能要彻底卸载火绒才行,我严重依赖了火绒的hips暂时不能卸载。 |
还好,你有 connect.exe 那个可以用。没必要卸载啦。 openssh 居然能用 ncat 就很奇怪,你写一个错误的 ncat 命令,看 openssh 是不是还是成功的? |
现在崩了:
|
你配置个错误的 ProxyCommand ,用 openssh 登录,看会不会失败? |
https://blog.panpili.com/2022/cloud/ssh-with-proxy/ |
tssh v0.1.12 已解决双引号的问题。 |
下面是我的config配置:
是我哪里使用的不对么,很奇怪微软自带的openssh客户端倒是正常
The text was updated successfully, but these errors were encountered: