我正在使用Windows 10上的WSL编程,最近发现可以通过SSH在VSCode中进行编辑。
但是,我通常通过WSL SSH到我的大学计算机,这样我就可以访问这些系统上的文件并使用它们的GPU。
有没有办法使用VSCode SSH进入WSL,然后SSH进入我的大学系统,并从VSCode中访问它们的资源和文件系统?
我正在使用Windows 10上的WSL编程,最近发现可以通过SSH在VSCode中进行编辑。
但是,我通常通过WSL SSH到我的大学计算机,这样我就可以访问这些系统上的文件并使用它们的GPU。
有没有办法使用VSCode SSH进入WSL,然后SSH进入我的大学系统,并从VSCode中访问它们的资源和文件系统?
您可以在Windows下创建ssh.bat
文件,其内容如下:
C:\Windows\system32\wsl.exe ssh %*
然后设置VS Code的"remote.SSH.path"配置项指向那个批处理文件。
这样,你在VS Code中使用的ssh配置和凭据与WSL中相同。
echo -e "C:\Windows\system32\wsl.exe bash -ic 'ssh %*'" >> /mnt/c/Users/$USER/.ssh/ssh.bat
- undefinedFailed to set up socket for dynamic port forward to remote port <port>: connect ECONNREFUSED 127.0.0.1:<port>. Is the remote port correct?
但奇怪的是,第一个<port>
与第二个<port>
不同。我能够登录,但当我尝试打开一个文件夹时它就卡住了。 - undefined如果在ssh.bat
文件中编写C:\Windows\system32\wsl.exe ssh %*
大多数情况下可以正常工作,但出现~/.bashrc
未被调用的问题,请将该命令替换为:
C:\Windows\system32\wsl.exe bash -ic 'ssh %*'
ssh
命令,并且会使用你的~/.bashrc
。使用上述方法可以解决我在VSCode远程终端中遇到的Ubuntu ssh-agent
无法转发密钥的问题。要从在VScode中运行的WSL连接到Linux机器,我执行了以下操作:
Host <your_host>
HostName <your_host>
User <your_username>
IdentityFile C:\Users\<your_username>\.ssh\<your_private_key>
cp /home/<your_wsl_username>/.ssh/<your_private_key> /mnt/c/Users/<your_windows_username>/.ssh
我发现这篇文章对我很有用,可以让我使用VSCode通过ssh连接到远程主机,在Windows 10中使用wsl ubuntu的ssh配置。
https://zitseng.com/archives/20325
作为我使用的是受口令保护的密钥,我还需要启用ssh代理并将其添加到密钥中才能使其正常工作。ssh-add mykey
,然后执行第一次ssh连接到主机。如果我不这样做,就会一直被要求输入ssh密钥的密码。Host <hostname>
User <ID for SSH login> # e.g. your university ID
HostName <full qualified address for your remote system> # e.g. system.subnet.university.edu
IdentityFile <your SSH pvt key> #e.g. ~/.ssh/id_rsa
步骤5: 在左侧导航栏中选择“Remote Explorer”,然后从下拉菜单中选择“SSH Targets”。您的主机名应在此处显示。右键单击并连接到主机。
步骤6: 如果提取tar文件时有任何失败,请仔细观察来自VSCode终端日志的第一次连接尝试的日志。
默认情况下,VS Code会在远程系统的主目录中安装vscode-server,这可能会因为您的大学空间限制而导致空间不足。您需要将vscode-server目录移动到一个没有空间限制的工作区域,通常是项目区域。请使用以下步骤执行此操作,我为我的组织创建了这些步骤:
一旦您启动了VSCode远程,连接可能会成功或失败,具体取决于远程主目录中的可用空间,因为默认情况下,VSCode会在主目录中设置您的远程服务器,并且无法更改。
If success, still move vscode-server to another large free space directory:
a. Navigate to a desired project space directory from remote desktop terminal
b. mv ~/.vscode-server /your/big/disk/project/space
c. ln -s /your/big/disk/project/space/.vscode-server ~/.vscode-server
d. Use full absolute paths in previous command to avoid cyclic links. Confirm with below command, it shoud not return anything.
$ find -L ./ -mindepth 15
e. Reconnect from your VSCode again
If failed, manually setup vscode-server on remote large free space directory:
a. Get vscode-server commit ID on remote server using below command, which would be like 'e2d4cc38bb5da82wb67q86fd50f84h67bb340987'
$ ls ~/.vscode-server/bin
b. Download tarball replacing $COMMIT_ID with the the commit number from the previous step on local system: https://update.code.visualstudio.com/commit:$COMMIT_ID/server-linux-x64/stable
c. Move tarball to remote server disk from local system:
$ scp -P 22 vscode-server-linux-x64.tar.gz remoteID.remote.system.url.com:~/
d. Move tarball to large free space directory as below:
$ mkdir -p /your/big/disk/project/space/.vscode-server/bin/$COMMIT_ID/
$ mv ~/vscode-server-linux-x64.tar.gz /your/big/disk/project/space/.vscode-server/bin/$COMMIT_ID/
e. Extract tarball in this directory
$ cd /your/big/disk/project/space/.vscode-server/bin/$COMMIT_ID
$ tar -xvzf vscode-server-linux-x64.tar.gz --strip-components 1
f. Create symlink of .vscode-server in your home directory
$ ln -s /your/big/disk/project/space/.vscode-server ~/.vscode-server
g. Connect again
Hazzard17提供的答案对我不再起作用了。我认为问题出在VSCode和输入密码上。我使用sshpass解决了这个问题。
安装:
sudo apt-get install sshpass
SSH.远程.路径 文件内容
C:\Windows\system32\wsl.exe sshpass -p <password> ssh %*
在使用Hazzard17的答案后,我还需要在VSCode -> 设置中激活标志remote.SSH.lockfilesInTmp
。这样对我很有效。
来源:https://github.com/microsoft/vscode-remote-release/issues/885