<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hpcguide.tau.ac.il/index.php?action=history&amp;feed=atom&amp;title=Submitting_vscode_job_on_slurm</id>
	<title>Submitting vscode job on slurm - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://hpcguide.tau.ac.il/index.php?action=history&amp;feed=atom&amp;title=Submitting_vscode_job_on_slurm"/>
	<link rel="alternate" type="text/html" href="https://hpcguide.tau.ac.il/index.php?title=Submitting_vscode_job_on_slurm&amp;action=history"/>
	<updated>2026-05-22T05:42:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://hpcguide.tau.ac.il/index.php?title=Submitting_vscode_job_on_slurm&amp;diff=1518&amp;oldid=prev</id>
		<title>Dvory: Created page with &quot;2 options hereby presented to use vscode  1. vscode via using an interactive job, and loading vscode module  2. vscode via ssh proxyjump  =vscode module= This method may be to...&quot;</title>
		<link rel="alternate" type="text/html" href="https://hpcguide.tau.ac.il/index.php?title=Submitting_vscode_job_on_slurm&amp;diff=1518&amp;oldid=prev"/>
		<updated>2025-04-03T12:31:38Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;2 options hereby presented to use vscode  1. vscode via using an interactive job, and loading vscode module  2. vscode via ssh proxyjump  =vscode module= This method may be to...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;2 options hereby presented to use vscode&lt;br /&gt;
&lt;br /&gt;
1. vscode via using an interactive job, and loading vscode module&lt;br /&gt;
&lt;br /&gt;
2. vscode via ssh proxyjump&lt;br /&gt;
&lt;br /&gt;
=vscode module=&lt;br /&gt;
This method may be too slow for the users, as noted by user luxembourg, however possible.&lt;br /&gt;
&lt;br /&gt;
User needs to:&lt;br /&gt;
&lt;br /&gt;
Login to powerslurm with &amp;#039;-X&amp;#039;&lt;br /&gt;
Request for interactive job with GUI,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun --partition power-general --x11 --pty bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then on the compute node need to load module &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load vscode/vscode-1.98.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also need to define a cache dir, it may be done in one of the scratches, e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export XDG_RUNTIME_DIR=/scratch200/dvory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So within the interactive job one may activate vscode by typing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=vscode via ssh proxyjump=&lt;br /&gt;
&lt;br /&gt;
Both &amp;#039;&amp;#039;&amp;#039;vscode&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;cursor&amp;#039;&amp;#039;&amp;#039; behave similarly, and this approach is supposed to be good for both of them.&lt;br /&gt;
&lt;br /&gt;
With this setup, a windows machine will be able to activate vscode/cursor in a compute node in the cluster, having the same slurm environment variables as defined in a batch script.&lt;br /&gt;
&lt;br /&gt;
* Every user may configure this, no need for root&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==In powerslurm-login node==&lt;br /&gt;
===One time setup===&lt;br /&gt;
Install dropbear in userspace.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;dropbear&amp;#039;&amp;#039;&amp;#039; is used to launch a private SSH server inside the job&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir -p dropbear/install&lt;br /&gt;
&lt;br /&gt;
# Build it from source&lt;br /&gt;
curl -LO https://matt.ucc.asn.au/dropbear/releases/dropbear-2022.83.tar.bz2&lt;br /&gt;
tar -xjf dropbear-2022.83.tar.bz2&lt;br /&gt;
cd dropbear-2022.83&lt;br /&gt;
./configure --prefix=$HOME/dropbear/install&lt;br /&gt;
make &amp;amp;&amp;amp; make install&lt;br /&gt;
&lt;br /&gt;
# Generate host key&lt;br /&gt;
$HOME/dropbear/install/bin/dropbearkey -t rsa -f $HOME/dropbear/install/server-key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Build a script===&lt;br /&gt;
Name of the script may be for example vscode_slurm_job.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=vscode&lt;br /&gt;
#SBATCH --partition=power-general&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
#SBATCH --mem=64G&lt;br /&gt;
#SBATCH --output=slurm_vscode.log&lt;br /&gt;
&lt;br /&gt;
DROPBEAR=&amp;quot;$HOME/dropbear/install&amp;quot;&lt;br /&gt;
SLURM_ENV_FILE=&amp;quot;$HOME/.slurm-env.bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 🧠 Derive unique port from SLURM_JOB_ID&lt;br /&gt;
PORT=$(( 40000 + SLURM_JOB_ID % 10000 ))&lt;br /&gt;
&lt;br /&gt;
# Save SLURM-related env vars to a file&lt;br /&gt;
env | awk -F= &amp;#039;$1~/^(SLURM|CUDA|NVIDIA_)/ { print &amp;quot;export &amp;quot; $0 }&amp;#039; &amp;gt; &amp;quot;$SLURM_ENV_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Write VS Code shell script&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt; &amp;quot;$HOME/.vscode-shell&amp;quot;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
source $SLURM_ENV_FILE&lt;br /&gt;
export XDG_RUNTIME_DIR=/tmp/\$USER-vscode-runtime&lt;br /&gt;
mkdir -p \$XDG_RUNTIME_DIR&lt;br /&gt;
chmod 700 \$XDG_RUNTIME_DIR&lt;br /&gt;
exec bash&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x &amp;quot;$HOME/.vscode-shell&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 📝 Write SSH connection instructions to a file&lt;br /&gt;
HOSTNAME=$(hostname -f)&lt;br /&gt;
echo &amp;quot;VS Code SSH setup info for this job:&amp;quot; &amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;--------------------------------------&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;HostName: $HOSTNAME&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;Port: $PORT&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;Username: $USER&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;RemoteCommand: ~/.vscode-shell&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;ProxyJump: $USER@powerslurm-login.tau.ac.il&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
echo &amp;quot;Suggested ~/.ssh/config entry:&amp;quot; &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; $HOME/vscode-connection-info.txt&lt;br /&gt;
&lt;br /&gt;
Host slurm-vscode&lt;br /&gt;
  HostName $HOSTNAME&lt;br /&gt;
  User $USER&lt;br /&gt;
  Port $PORT&lt;br /&gt;
  ProxyJump $USER@powerslurm-login.tau.ac.il&lt;br /&gt;
  RemoteCommand ~/.vscode-shell&lt;br /&gt;
  IdentityFile ~/.ssh/your_key&lt;br /&gt;
  StrictHostKeyChecking no&lt;br /&gt;
  UserKnownHostsFile /dev/null&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# Cleanup on exit&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -f &amp;quot;$SLURM_ENV_FILE&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap &amp;#039;cleanup&amp;#039; SIGTERM SIGINT EXIT&lt;br /&gt;
&lt;br /&gt;
# Launch dropbear&lt;br /&gt;
$DROPBEAR/sbin/dropbear -r $DROPBEAR/server-key -F -E -w -s -p $PORT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==In windows==&lt;br /&gt;
===Generate an SSH key===&lt;br /&gt;
Open PowerShell or Git Bash on Windows, and run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -b 4096&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    Accept the default path (C:\Users\YourName\.ssh\id_rsa)&lt;br /&gt;
&lt;br /&gt;
    Choose a passphrase or leave empty&lt;br /&gt;
&lt;br /&gt;
You now have:&lt;br /&gt;
&lt;br /&gt;
    Private key: C:\Users\YourName\.ssh\id_rsa ← Keep this secure!&lt;br /&gt;
&lt;br /&gt;
    Public key: C:\Users\YourName\.ssh\id_rsa.pub&lt;br /&gt;
&lt;br /&gt;
Copy the content of id_rsa.pub to powerslurm-login&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vim ~/.ssh/authorized_keys&lt;br /&gt;
# Paste the key and save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This key may also be copied to the compute node that is allocated for the job&lt;br /&gt;
&lt;br /&gt;
===Create ~\.ssh\config file===&lt;br /&gt;
Set up ~/.ssh/config:&lt;br /&gt;
&lt;br /&gt;
Create or edit C:\Users\&amp;lt;YourUsername&amp;gt;\.ssh\config, containing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host slurm-vscode&lt;br /&gt;
  HostName compute-0-xxx     # Replace with the compute node&lt;br /&gt;
  User dvory                 # Replace with actual username&lt;br /&gt;
  ProxyJump dvory@powerslurm-login.tau.ac.il&lt;br /&gt;
  Port 64321&lt;br /&gt;
  IdentityFile ~/.ssh/id_rsa      # Or correct private key&lt;br /&gt;
  StrictHostKeyChecking no&lt;br /&gt;
  UserKnownHostsFile /dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set permissions of .ssh/config===&lt;br /&gt;
Need to open cmd, and then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icacls &amp;quot;%USERPROFILE%\.ssh\id_rsa&amp;quot; /reset&lt;br /&gt;
icacls &amp;quot;%USERPROFILE%\.ssh\id_rsa&amp;quot; /inheritance:r&lt;br /&gt;
icacls &amp;quot;%USERPROFILE%\.ssh\id_rsa&amp;quot; /grant:r &amp;quot;%USERNAME%:F&amp;quot;&lt;br /&gt;
icacls &amp;quot;%USERPROFILE%\.ssh\config&amp;quot; /reset&lt;br /&gt;
icacls &amp;quot;%USERPROFILE%\.ssh\config&amp;quot; /inheritance:r&lt;br /&gt;
icacls &amp;quot;%USERPROFILE%\.ssh\config&amp;quot; /grant:r &amp;quot;%USERNAME%:F&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download &amp;#039;&amp;#039;&amp;#039;VS Code&amp;#039;&amp;#039;&amp;#039; (https://code.visualstudio.com/) or &amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039; (https://www.cursor.com/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the application and install there, or make sure that thie application Remote-SSH is installed&lt;br /&gt;
&lt;br /&gt;
===Installing Remote-SSH extension===&lt;br /&gt;
Launch your VS Code / Cursor app.&lt;br /&gt;
🔍 Open the Extensions Sidebar&lt;br /&gt;
&lt;br /&gt;
    Click the square icon on the left sidebar (or press Ctrl+Shift+X)&lt;br /&gt;
&lt;br /&gt;
    In the Search box, type:&lt;br /&gt;
&lt;br /&gt;
Remote - SSH&lt;br /&gt;
&lt;br /&gt;
📦 Install the Extension&lt;br /&gt;
&lt;br /&gt;
    Find: &amp;quot;Remote - SSH by Microsoft&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Click Install&lt;br /&gt;
&lt;br /&gt;
Remote-SSH Extension in Marketplace&lt;br /&gt;
&lt;br /&gt;
You’ll see a green install bar. Once done, you’ll see a new green &amp;quot;&amp;gt;&amp;lt;&amp;quot; icon in the bottom-left — that’s the remote connection control.&lt;br /&gt;
&lt;br /&gt;
===Test connection===&lt;br /&gt;
In VS Code or Cursor:&lt;br /&gt;
&lt;br /&gt;
    Hit F1 → “Remote-SSH: Connect to Host”&lt;br /&gt;
&lt;br /&gt;
    Select &amp;#039;&amp;#039;&amp;#039;slurm-vscode&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
You should get connected to the compute node inside the running Slurm job.&lt;br /&gt;
&lt;br /&gt;
==Running vscode==&lt;br /&gt;
===On powerslurm-login===&lt;br /&gt;
Submit the script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch vscode_slurm_job.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check that the job is running, and find the allocated node:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue --me&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The script that was submitted to run is supposed to generate a file named ~/vscode-connection-info.txt, containing all information needed for the proxyjump procedure.&lt;br /&gt;
&lt;br /&gt;
Check compute node and port when the job is running, by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/vscode-connection-info.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will see an output like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VS Code SSH setup info for this job:&lt;br /&gt;
--------------------------------------&lt;br /&gt;
HostName: compute-0-499.power5&lt;br /&gt;
Port: 43104&lt;br /&gt;
Username: dvory&lt;br /&gt;
RemoteCommand: ~/.vscode-shell&lt;br /&gt;
ProxyJump: dvory@powerslurm-login.tau.ac.il&lt;br /&gt;
&lt;br /&gt;
Suggested ~/.ssh/config entry:&lt;br /&gt;
&lt;br /&gt;
Host slurm-vscode&lt;br /&gt;
  HostName compute-0-499.power5&lt;br /&gt;
  User dvory&lt;br /&gt;
  Port 43104&lt;br /&gt;
  ProxyJump dvory@powerslurm-login.tau.ac.il&lt;br /&gt;
  RemoteCommand ~/.vscode-shell&lt;br /&gt;
  IdentityFile ~/.ssh/your_key&lt;br /&gt;
  StrictHostKeyChecking no&lt;br /&gt;
  UserKnownHostsFile /dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And would need to change accordingly the ~/.ssh/config file on windows&lt;br /&gt;
&lt;br /&gt;
Let us assume it is running on node compute-0-499, port 43104 as was returned in the above example&lt;br /&gt;
===On windows===&lt;br /&gt;
Change file ~/.ssh/config according to the actual compute node that was allocated to the job&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host slurm-vscode&lt;br /&gt;
  HostName compute-0-499     # Replace with the compute node&lt;br /&gt;
  User dvory                 # Replace with actual username&lt;br /&gt;
  ProxyJump dvory@powerslurm-login.tau.ac.il&lt;br /&gt;
  Port 43104                 # Replace with actual port&lt;br /&gt;
  IdentityFile ~/.ssh/id_rsa # Or correct private key&lt;br /&gt;
  StrictHostKeyChecking no&lt;br /&gt;
  UserKnownHostsFile /dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In vscode ot cursor&lt;br /&gt;
&lt;br /&gt;
Press F1 → type and select:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Remote-SSH: Connect to Host...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Or click the green &amp;quot;&amp;gt;&amp;lt;&amp;quot; icon (bottom-left)&lt;br /&gt;
&lt;br /&gt;
Choose a host defined in your ~/.ssh/config (e.g., slurm-vscode)&lt;/div&gt;</summary>
		<author><name>Dvory</name></author>
	</entry>
</feed>