// x11 OpenChannel (Not working...)
x11Data := x11channel{
Host: "localhost",
Port: uint32(6000),
}
sshChan, req, x11err := client.OpenChannel("x11", ssh.Marshal(x11Data))
Основная проблема здесь заключается в том, что каналы пересылки X11 инициируются от сервера SSH к клиенту SSH. Вы пытаетесь открыть канал X11 от клиента к серверу. Это не поддерживается вашим сервером, и это не обычный способ переадресации X.
Я не программист. Но после просмотра документации после отправки вашего x11-req похоже, что вы бы позвонили client.HandleChannelOpen () для получения запросов X11-каналов, поступающих с сервера.
Дополнительные сведения: Для ясности начните с терминологии. Ваша программа - ssh-клиент , и она подключается к ssh-серверу . С X * server - это программа, которая управляет дисплеем, клавиатурой и мышью. X клиенты - это программы, такие как xterm и xeyes, которые подключаются к серверу для отображения окон и выполняют аналогичные действия.
Если вы хотите переслать X11 через SSH, клиент ssh отправит запрос X11 серверу ssh. Это говорит серверу, что клиент хочет пересылку X11 для соединения. Сервер выполнит некоторую настройку и откроет порт прослушивания TCP для приема соединений от клиентов X.
Когда клиент X подключается к порту прослушивания X11 сервера ssh, сервер ssh откроет канал обратно клиенту ssh. Ssh-клиент будет подключаться к локальному X-серверу, а ssh-клиент и ssh-сервер будут передавать данные между X-сервером (локальным для хоста ssh-клиента) и X-клиентом (локальным для хоста ssh-сервера). Каждый канал обрабатывает один X-клиент.
Таким образом, такая программа, как ваша, должна отправить запрос на сервер, сигнализирующий, что ваша программа хочет переслать X11 через соединение ssh. Фактические каналы x11 будут открыты по запросу с сервера ssh на клиент ssh, когда клиент X попытается использовать переадресованную службу X11.