Удаленный SSH из VSCode долго подключается к удаленной машине

Вопросы и ответы

Я использую компьютер с Windows 10 и подключаюсь через Tailscale к своему ноутбуку, на котором установлена Manjaro. Когда я использую Windows PowerShell или WSL, я могу без проблем подключиться к ноутбуку с помощью ssh username@ip. Я использую расширение Remote SSH для VSCode, нажимаю ‘подключиться к хосту’ и вводлю то же имя пользователя и IP. Он показывает ‘открытие удаленного’, открывает дерево файлов слева и также один файл в редакторе, который уже был открыт. На первый взгляд, выглядит так, как будто подключение успешно. Но он не открывает оболочку, bash или fish. Я могу нажать на знак плюса, чтобы открыть терминал, но он просто продолжает загружаться. Аналогичным образом, если я открываю файл из дерева файлов, он тоже просто продолжает загружаться. В канале вывода “Pty Host” я получаю:

2024-09-14 18:11:44.818 [warning] Shell integration cannot be enabled for executable "C:\Windows\System32\cmd.exe" and args /c (type "C:\Users\<USER>~1\AppData\Local\Temp\vscode-linux-multi-line-command-<ip>-372071090.sh" | "C:\Windows\System32\OpenSSH\ssh.exe" -T -D 50600 "<ip>" sh) & exit /b 0

где <ip> и <USER> — это IP, к которому я подключаюсь, и мое имя пользователя. Вывод Remote SSH немного длиннее, поэтому я добавлю его в конце.

Одно очень странное наблюдение: если я жду достаточно долго, около 5-10 минут, иногда он подключается к оболочке. Мне кажется, что здесь есть какая-то проблема с конкуренцией или таймаутом ожидания или что-то подобное.

Я уже попробовал много вещей:

  • Отключение всех расширений ничего не изменило (включая все, что связано с git, как некоторые предлагали)
  • Переустановка VSCode тоже не помогла
  • Установка AI-версии VSCode, Cursor, забавно имеет ту же проблему
  • Но: использование WSL-версии VSCode не сталкивается с этой проблемой.
  • ==> Почему это работает для оболочки SSH или WSL VSCode, но не для обычного VSCode?
  • На удаленной машине, ноутбуке, я различными способами удалял папку ~/.vscode-server и все, что в ней, а также убивал процессы node и code на этой машине. Ничего не помогло.
  • Изучение различных логов в папке .vscode-server также не дало мне подсказок.

Я в отчаянии и буду благодарен за любые подсказки.

Журнал вывода Remote SSH

[18:11:44.617] Уровень журнала: 2
[18:11:44.626] Версия VS Code: 1.93.1
[18:11:44.626] Версия Remote-SSH: [email protected]
[18:11:44.627] win32 x64
[18:11:44.628] SSH Resolver вызван для "ssh-remote+<ip>", попытка 1
[18:11:44.628] "remote.SSH.useLocalServer": false
[18:11:44.628] "remote.SSH.useExecServer": true
[18:11:44.629] "remote.SSH.showLoginTerminal": false
[18:11:44.629] "remote.SSH.remotePlatform": {"<ip>":"linux"}
[18:11:44.629] "remote.SSH.path": неопределено
[18:11:44.629] "remote.SSH.configFile": неопределено
[18:11:44.629] "remote.SSH.useFlock": true
[18:11:44.629] "remote.SSH.lockfilesInTmp": false
[18:11:44.629] "remote.SSH.localServerDownload": auto
[18:11:44.629] "remote.SSH.remoteServerListenOnSocket": false
[18:11:44.629] "remote.SSH.showLoginTerminal": false
[18:11:44.630] "remote.SSH.defaultExtensions": []
[18:11:44.630] "remote.SSH.loglevel": 2
[18:11:44.630] "remote.SSH.enableDynamicForwarding": true
[18:11:44.630] "remote.SSH.enableRemoteCommand": false
[18:11:44.630] "remote.SSH.serverPickPortsFromRange": {}
[18:11:44.630] "remote.SSH.serverInstallPath": {}
[18:11:44.630] "remote.SSH.permitPtyAllocation": false
[18:11:44.630] "remote.SSH.preferredLocalPortRange: неопределено
[18:11:44.630] "remote.SSH.useCurlAndWgetConfigurationFiles: false
[18:11:44.638] SSH Resolver вызван для хоста: <ip>
[18:11:44.638] Настройка SSH remote "<ip>"
[18:11:44.641] Используя commit id "38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40" и качество "stable" для сервера
[18:11:44.643] Переменные скрипта:
 {
  "InstallExitCode.24": "AlreadyInProgress",
  "InstallExitCode.25": "ServerDownloadFailed",
  "InstallExitCode.26": "NoDownloaderAvailable",
  "InstallExitCode.27": "UnsupportedArch",
  "InstallExitCode.28": "StatusCheckFailed",
  "InstallExitCode.29": "NeedInsidersArch",
  "InstallExitCode.30": "NoDownloaderAvailableForStatusCheck",
  "InstallExitCode.31": "ServerTransferFailed",
  "InstallExitCode.32": "ServerFailedToStart",
  "InstallExitCode.33": "NeedInsidersWindows",
  "InstallExitCode.34": "CreateInstallDirFailed",
  "InstallExitCode.35": "UnsupportedPlatform",
  "InstallExitCode.36": "ServerTerminatedCVE20201416",
  "InstallExitCode.37": "UnpackFailed",
  "InstallExitCode.38": "ChangeDirFailed",
  "InstallExitCode.AlreadyInProgress": "24",
  "InstallExitCode.ServerDownloadFailed": "25",
  "InstallExitCode.NoDownloaderAvailable": "26",
  "InstallExitCode.NoDownloaderAvailableForStatusCheck": "30",
  "InstallExitCode.UnsupportedArch": "27",
  "InstallExitCode.StatusCheckFailed": "28",
  "InstallExitCode.NeedInsidersArch": "29",
  "InstallExitCode.ServerTransferFailed": "31",
  "InstallExitCode.ServerFailedToStart": "32",
  "InstallExitCode.NeedInsidersWindows": "33",
  "InstallExitCode.CreateInstallDirFailed": "34",
  "InstallExitCode.UnsupportedPlatform": "35",
  "InstallExitCode.ServerTerminatedCVE20201416": "36",
  "InstallExitCode.UnpackFailed": "37",
  "InstallExitCode.ChangeDirFailed": "38",
  "InstallUnpackCode.Success": "success",
  "InstallUnpackCode.Error": "error",
  "InstallUnpackCode.MissingFiles": "missingFiles",
  "uuid": "818657b941e3",
  "startMarker": "818657b941e3: running",
  "commitId": "38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40",
  "quality": "stable",
  "token": "1aaaa1aa-aa11-1a11-aa1a-1111a11111a1",
  "vscodeAgentFolder": "$HOME/.vscode-server",
  "allowClientDownload": "1",
  "forceClientDownload": "0",
  "cliNameInArchive": "code",
  "ignoreWgetConfigFlag": " --no-config ",
  "ignoreCurlConfigFlag": " --disable ",
  "wgetTriesSegment": "--tries=1",
  "listenArgs": "--on-host=127.0.0.1 --on-port",
  "getDownloadServerStartTrigger": "818657b941e3:trigger_server_download",
  "getDownloadServerEndTrigger": "818657b941e3:trigger_server_download_end",
  "getProgressDownloading": "818657b941e3%%1%%",
  "getProgressInstalling": "818657b941e3%%2%%"
}
[18:11:44.645] Установка и запуск сервера при необходимости
[18:11:44.649] Проверка ssh с помощью "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\ssh.exe -V"
[18:11:44.652] Получена ошибка от ssh: spawn C:\Program Files (x86)\Common Files\Oracle\Java\javapath\ssh.exe ENOENT
[18:11:44.652] Проверка ssh с помощью "C:\Python39\Scripts\ssh.exe -V"
[18:11:44.653] Получена ошибка от ssh: spawn C:\Python39\Scripts\ssh.exe ENOENT
[18:11:44.653] Проверка ssh с помощью "C:\Python39\ssh.exe -V"
[18:11:44.654] Получена ошибка от ssh: spawn C:\Python39\ssh.exe ENOENT
[18:11:44.655] Проверка ssh с помощью "C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\ssh.exe -V"
[18:11:44.655] Получена ошибка от ssh: spawn C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\ssh.exe ENOENT
[18:11:44.656] Проверка ssh с помощью "C:\Windows\system32\ssh.exe -V"
[18:11:44.657] Получена ошибка от ssh: spawn C:\Windows\system32\ssh.exe ENOENT
[18:11:44.657] Проверка ssh с помощью "C:\Windows\ssh.exe -V"
[18:11:44.658] Получена ошибка от ssh: spawn C:\Windows\ssh.exe ENOENT
[18:11:44.658] Проверка ssh с помощью "C:\Windows\System32\Wbem\ssh.exe -V"
[18:11:44.659] Получена ошибка от ssh: spawn C:\Windows\System32\Wbem\ssh.exe ENOENT
[18:11:44.659] Проверка ssh с помощью "C:\Windows\System32\WindowsPowerShell\v1.0\ssh.exe -V"
[18:11:44.661] Получена ошибка от ssh: spawn C:\Windows\System32\WindowsPowerShell\v1.0\ssh.exe ENOENT
[18:11:44.661] Проверка ssh с помощью "C:\Windows\System32\OpenSSH\ssh.exe -V"
[18:11:44.696] > OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2

[18:11:44.700] Запуск скрипта с командой подключения: "C:\Windows\System32\OpenSSH\ssh.exe" -T -D 50600 "<ip>" sh
[18:11:44.702] Сгенерированная SSH команда: 'type "C:\Users\<USER>~1\AppData\Local\Temp\vscode-linux-multi-line-command-<ip>-372071090.sh" | "C:\Windows\System32\OpenSSH\ssh.exe" -T -D 50600 "<ip>" sh'
[18:11:44.702] Путь оболочки терминала: C:\Windows\System32\cmd.exe
[18:11:44.963] >  ]0;C:\Windows\System32\cmd.exe
[18:11:44.963] Получен некоторый вывод, сбрасываю таймаут подключения
[18:11:45.538] > 818657b941e3: running
> Запуск скрипта под PID: 692114
[18:11:45.569] > Найдена существующая установка в /home/<username>/.vscode-server...
> Запуск VS Code CLI...
> printenv:
>     SHELL=/bin/bash
>     PWD=/home/<username>
>     LOGNAME=<username>
>     XDG_SESSION_TYPE=tty
>     MOTD_SHOWN=pam
>     HOME=/home/<username>
>     SSH_CONNECTION=<my_ip> 50601 <ip> 22
>     XDG_SESSION_CLASS=user
>     USER=<username>
>     SHLVL=1
>     XDG_SESSION_ID=144
>     XDG_RUNTIME_DIR=/run/user/1000
>     SSH_CLIENT=<my_ip> 50601 22
>     PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
>     DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
>     MAIL=/var/spool/mail/<username>
>     _=/usr/bin/printenv
> Удаление старого файла журнала по пути /home/<username>/.vscode-server/.cli.38c31bc77e0dd6ae88a4e9
> cc93428cc27a56ba40.log
> Запущен удаленный CLI: 692132
> Ожидание журнала сервера...
[18:11:45.583] > Ожидание журнала сервера...
[18:11:45.632] > 818657b941e3: start
> listeningOn==127.0.0.1:43255==
> osReleaseId==manjaro==        
> arch==x86_64==
> vscodeArch==x64==
> bitness==64==
> tmpDir==/run/user/1000==
> platform==linux==
> unpackResult====
> didLocalDownload==0==
> downloadTime====
> installTime====
> serverStartTime==71==
> execServerToken==1aaaa1aa-aa11-1a11-aa1a-1111a11111a1==
> platformDownloadPath==cli-alpine-x64==
> 818657b941e3: end
[18:11:45.632] Получен вывод установки: 
listeningOn==127.0.0.1:43255==
osReleaseId==manjaro==        
arch==x86_64==
vscodeArch==x64==
bitness==64==
tmpDir==/run/user/1000==
platform==linux==
unpackResult====
didLocalDownload==0==
downloadTime====
installTime====
serverStartTime==71==
execServerToken==1aaaa1aa-aa11-1a11-aa1a-1111a11111a1==
platformDownloadPath==cli-alpine-x64==

[18:11:45.632] Удаленный сервер слушает на порту 43255
[18:11:45.633] Проанализирована конфигурация сервера: {"serverConfiguration":{"remoteListeningOn":{"port":43255},"osReleaseId":"manjaro","arch":"x86_64","tmpDir":"/run/user/1000","platform":"linux","execServerToken":"1aaaa1aa-aa11-1a11-aa1a-1111a11111a1"},"serverStartTime":71,"installUnpackCode":""}
[18:11:45.637] Запуск пересылающего сервера. локальный порт 50602 -> socksPort 50600 -> удаленный порт 43255
[18:11:45.638] Пересылающий сервер слушает на порту 50602
[18:11:45.638] Ожидание готовности SSH-туннеля
[18:11:45.641] Туннелированный порт 43255 к локальному порту 50602
[18:11:45.641] Разрешение "ssh-remote+<ip>" на "порт 50602"
[18:11:45.646] Инициализация нового сервера выполнения для ssh-remote+<ip>
[18:11:45.646] Разрешение сервера выполнения на порту 50602
[18:11:45.668] [Пересылающий сервер порт 50602] Получено соединение 0
[18:11:45.674] [Пересылающий сервер порт 50602] Получено соединение 1
[18:11:46.121] Сервер выполнения для ssh-remote+<ip> создан и кэширован
[18:11:46.125] ------

[18:11:46.172] [сервер] Проверка /home/<username>/.vscode-server/cli/servers/Stable-38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40/log.txt и /home/<username>/.vscode-server/cli/servers/Stable-38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40/pid.txt на наличие работающего сервера...
[18:11:46.172] [сервер] Найден работающий сервер (pid=687441)

Ответ

Проблема с медленным подключением к удаленному компьютеру через Remote SSH в Visual Studio Code может быть вызвана несколькими факторами. Поскольку вы уже упомянули, что успешно подключаетесь через PowerShell и WSL, это указывает на то, что проблема, вероятно, связана с настройками VSCode или расширением. Давайте рассмотрим несколько возможных решений.

1. Проверьте настройки SSH в VSCode

Убедитесь, что в настройках VSCode правильно указаны пути к SSH-клиенту. Вы можете настроить его следующим образом:

  • Откройте файл settings.json (Командная палитра -> "Preferences: Open Settings (JSON)").
  • Убедитесь, что там есть строка:
"remote.SSH.path": "C:\\Windows\\System32\\OpenSSH\\ssh.exe"

2. Используйте другой терминал

Попробуйте изменить терминал, который использует VSCode для SSH. Для этого откройте settings.json и добавьте или измените следующее:

"terminal.integrated.shell.windows": "C:\\Windows\\System32\\bash.exe"

Или укажите любой другой терминал, который предпочитаете.

3. Отключите расширения

Хотя вы уже пытались отключить все расширения, иногда могут быть конфликты с некоторыми конкретными расширениями, установленными в VSCode. Убедитесь, что у вас нет установленных расширений, связанных с управлением SSH или терминалом, которые могут мешать функционированию Remote SSH.

4. Убедитесь в наличии необходимых пакетов на удаленной машине

На удаленной машине убедитесь, что установлены необходимые пакеты для работы с VSCode, такие как node, npm, а также, возможно, эквиваленты для вашей оболочки (bash или fish). Вы можете установить их через пакетный менеджер Manjaro, например:

sudo pacman -S nodejs npm

5. Установите последние обновления

Также важно убедиться, что у вас самая последняя версия VSCode и расширения Remote SSH. Проверьте наличие обновлений и установите их.

6. Проверка подключения

Если проблема все еще не решена, попробуйте выполнить следующее:

  • Откройте командную строку или терминал и используйте SSH с параметром -v (verbose) для получения более подробной информации:
ssh -v username@ip

Это поможет вам понять, что именно происходит во время соединения и где может быть задержка.

7. Удаление старых серверов VSCode

Иногда может помочь полное удаление директорий, связанных с VSCode на удаленной машине:

rm -rf ~/.vscode-server

После этого попробуйте снова подключиться через VSCode, и он должен заново установить сервер.

8. Время ожидания подключения

Если подключение действительно занимает 5-10 минут, возможно, дело в проблемах с сетью. Проверьте скорость соединения и стабильность Tailscale между вашим Windows и Manjaro. Попробуйте перезапустить Tailscale на обеих машинах.

Заключение

Проблемы с подключением через Remote SSH могут быть вызваны множеством факторов, начиная от конфигурации VSCode и заканчивая проблемами на стороне удаленной машины или сети. Используйте описанные выше методы по порядку, чтобы изолировать и решить вашу проблему.

Оцените материал
Добавить комментарий

Капча загружается...