Я использую компьютер с 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
- Ответ
- 1. Проверьте настройки SSH в VSCode
- 2. Используйте другой терминал
- 3. Отключите расширения
- 4. Убедитесь в наличии необходимых пакетов на удаленной машине
- 5. Установите последние обновления
- 6. Проверка подключения
- 7. Удаление старых серверов VSCode
- 8. Время ожидания подключения
- Заключение
Журнал вывода 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 и заканчивая проблемами на стороне удаленной машины или сети. Используйте описанные выше методы по порядку, чтобы изолировать и решить вашу проблему.