Я полагаю, что проблема, с которой вы сталкиваетесь, заключается в том, что сервер ssh не может гарантировать, что кто-то еще не использовал (локально или удаленно переадресован) определенный номер дисплея (и порт), поэтому он должен выбрать тот, который открыт. Я не знаю точно, но я предполагаю, что он пытается открыть их последовательно и останавливается на первом, который откроется. Любые открытые порты дисплея (в том числе некоторые из них остаются незакрытыми из-за того, что старые процессы зависают) могут неограниченно открывать те, которые вы хотите открыть.
Хотя это не гарантия, вы можете попробовать установить другое значение для X11DisplayOffset
вашего сервера sshd_config
. Это все еще не останавливает другого пользователя или даже ваш мошеннический процесс, когда первый доступный дисплей / порт X открыт.
В качестве альтернативы, вы можете попытаться установить DISPLAY
переменную вручную (на стороне сервера) для некоторого «необычного» номера или номера высокого порта в надежде, что вы сможете избежать обычно используемых портов с меньшим номером. например, выберите DISPLAY=:76
, что означает порт, который вам нужно затем перенаправить порт 6076 обратно на ваш локальный X-сервер; Если вы не знали, TCP-порт X использует номер 6000 + DISPLAY (серверы VNC обычно используют 5900 + DISPLAY, IIRC). Вы могли бы выполнить ручную пересылку при вызове ssh, используя что-то вроде этого:
ssh -R6076:localhost:6000 server
Это перенаправит порт 6076 на удаленном конце (сервере) обратно на локальный дисплей (при условии, что DISPLAY: 0). Недостатком этого подхода является то, что теперь вам приходится иметь дело со всеми вещами XAuth, которые ssh
делают для вас автоматически, используя -X (см. Этот пост для подсказок), но он должен работать. YYMV и скромные биты, оставленные читателю в качестве упражнения ;-).