Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何进行简单的SSH x11转发_Go_Ssh_X11_X11 Forwarding - Fatal编程技术网

Go 如何进行简单的SSH x11转发

Go 如何进行简单的SSH x11转发,go,ssh,x11,x11-forwarding,Go,Ssh,X11,X11 Forwarding,我试图在Go中实现ssh x11转发,参考Paramiko的源代码,但效果不好 x11 req请求似乎成功,但OpenChannel失败。 难道没有更好的办法吗 完整的代码在这里 包干管 省略 func main{ //创建sshClientConfig sshConfig:=&ssh.ClientConfig{ 用户:用户,, Auth:[]ssh.AuthMethod{ ssh.Passwordpass, }, HostKeyCallback:ssh.unsecureIgnoreHostKe

我试图在Go中实现ssh x11转发,参考Paramiko的源代码,但效果不好

x11 req请求似乎成功,但OpenChannel失败。 难道没有更好的办法吗

完整的代码在这里

包干管 省略 func main{ //创建sshClientConfig sshConfig:=&ssh.ClientConfig{ 用户:用户,, Auth:[]ssh.AuthMethod{ ssh.Passwordpass, }, HostKeyCallback:ssh.unsecureIgnoreHostKey, } //SSH连接。 客户端,错误:=ssh.Dialtcp,主机+:+端口,sshConfig //创建会话 会话,错误:=client.NewSession 推迟会话。关闭 //注: //x11请求有效负载 有效负载:=X11请求{ 单连接:false, AuthProtocol:stringMIT-MAGIC-COOKIE-1, AuthCookie:stringd92c30482cc3d2de61888961deb74c08, 屏幕编号:uint320, } //注: //发送x11请求 好,错误:=session.SendRequestx11-req,true,ssh.marshallPayload 如果err==nil&&!确定{ fmt.Printlnerrors.Newssh:x11请求失败 } fmt.Printfx11-req:%v\n,正常 fmt.Println--- //x11 OpenChannel不工作。。。 X11数据:=X11通道{ 主机:localhost, 港口:UINT32600, } sshChan,req,x11err:=client.OpenChannelx11,ssh.Marshalx11Data fmt.PrintlnsshChan//DEBUG fmt.Printlnreq//DEBUG fmt.Printlnx11err//DEBUG 省略 } 我添加了sshd端调试日志

sshd[1811]: debug1: server_input_channel_req: channel 0 request x11-req reply 1
sshd[1811]: debug1: session_by_channel: session 0 channel 0
sshd[1811]: debug1: session_input_channel_req: session 0 req x11-req
sshd[1811]: debug1: channel 1: new [X11 inet listener]
sshd[1811]: debug1: channel 2: new [X11 inet listener]
sshd[1811]: debug1: server_input_channel_open: ctype x11 rchan 1 win 2097152 max 32768
sshd[1811]: debug1: server_input_channel_open: failure x11
谢谢大家!多亏了它,我才能够安全地实施它。有一个工作代码

这里的基本问题是X11转发通道从SSH服务器启动到SSH客户端。您正在尝试打开从客户端到服务器的X11通道。您的服务器不支持这一点,并且这不是使用X转发的常用方式

我不是一个围棋程序员。但是在查看之后,在发送x11 req之后,您似乎会调用以接收来自服务器的x11通道请求

更多背景:为了清楚起见,从术语开始。您的程序是一个ssh客户端,它连接到一个ssh服务器。对于X,服务器是控制显示器、键盘和鼠标的程序。X客户机是像xterm和xeyes这样的程序,它们连接到服务器以显示窗口并执行类似的操作

当您希望通过SSH转发X11时,SSH客户端将向SSH服务器发送一个X11请求。这会告诉服务器客户端希望为连接进行X11转发。服务器将执行一些设置并打开一个TCP侦听端口以接收来自X客户端的连接

当X客户端连接到ssh服务器的X11侦听端口时,ssh服务器将打开一个返回ssh客户端的通道。ssh客户端将连接到本地X服务器,ssh客户端和ssh服务器将在ssh客户端主机的本地X服务器和ssh服务器主机的本地X客户端之间中继数据。每个通道处理一个X客户机


因此,像您这样的程序必须向服务器发送请求,表明您的程序希望通过ssh连接转发X11。当X客户端尝试使用转发的x11服务时,实际的x11通道将根据需要从ssh服务器打开到ssh客户端。

…但OpenChannel失败。这不是很有用。那到底发生了什么?服务器是否记录了任何有用的错误消息?抱歉。我添加了sshd端调试日志。非常感谢!看来我误解了!这是有可能实现的基础上,你教!
// x11 OpenChannel (Not working...)
x11Data := x11channel{
    Host: "localhost",
    Port: uint32(6000),
}

sshChan, req, x11err := client.OpenChannel("x11", ssh.Marshal(x11Data))