Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added docs/images/remotessh_00.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_03.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_04.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_05.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_06.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_07.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_09.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/remotessh_11.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,15 @@ <h1 style="border-bottom: 1px solid var(--main-header-border-bottom-color, #eaec
UMich CoE Linux environment
</div>
</div>
<div class="item">
<a class="header" target="_blank" href="setup_remotessh.html">
<i class="icon satellite dish"></i>VSCode CAEN Access
</a>
<div class="description">
Develop and test directly on CAEN
using VSCode
</div>
</div>
</div>

</div>
Expand Down
136 changes: 136 additions & 0 deletions docs/setup_remotessh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
---
layout: spec
title: Setup VS Code CAEN Access
---

VS Code CAEN Access
==========
{: .primer-spec-toc-ignore }

This tutorial will show you how to set up VS Code access into CAEN Linux via SSH. It allows you to remotely edit and execute files as if you were using VS Code on the CAEN computers themselves. This may come in handy for those who wish to develop and test their projects directly on CAEN.


## Prerequisites
If you haven't already, follow the [CAEN Linux Tutorial](setup_caen.html) so your CAEN environment is ready for VS Code to access. If you need a refresher on VS code, read through the [tutorial](setup_vscode.html).


<div class="primer-spec-callout warning" markdown="1">
**Pitfall:** If you are off campus, make sure you have connected to the [UM VPN](https://its.umich.edu/enterprise/wifi-networks/vpn/getting-started) before continuing.
</div>

## Setup Remote SSH Extension

### Edit SSH Config
First, we need to specify CAEN as a host in our SSH config file so VS Code knows where to connect. You can find the file at `~/.ssh/config`.

Make sure you set up [SSH multiplexing](setup_caen.html#avoiding-repeated-2fa) from the CAEN Linux Tutorial if you haven't already. This can help you avoid repeated 2FA prompts when connecting.

Add the following lines to the SSH config file, replacing `<uniqname>` with your own uniqname.
```
Host caen #(Can be named anything you like)
HostName login.engin.umich.edu
User <uniqname>
```

Verify the contents of your `~/.ssh/config` file.
```console
$ cat ~/.ssh/config
# SSH multiplexing (from CAEN Linux Tutorial)
Host *
ControlMaster auto
ControlPersist yes
ControlPath ~/.ssh/socket-%C
ServerAliveInterval 60
ServerAliveCountMax 5

Host caen
HostName login.engin.umich.edu
User armaanr
```

<div class="primer-spec-callout info" markdown="1">
**Pro-tip:** Adding hosts in this manner also gives you an easy way to SSH without needing to remember the hostname. For example:
```console
$ ssh caen
([email protected]) Password:
```
</div>

### Install Extension
Open up VS Code and install the [Remote - SSH Extension](https://aka.ms/vscode-remote/download/ssh).

<img src="images/remotessh_00.png" width="768px" />

### Modify Extension Settings
In its default configuration, the extension doesn't play nicely with the CAEN computers. So, we need to modify some settings first.

Open the command palette by pressing <kbd>Command</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> on Mac or <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> on Windows/Linux. Search for "Remote SSH settings" and click on the option.

<img src="images/remotessh_01.png" width="768px" />


Search for "Exec Server" and disable the "Use Exec Server" option.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you have a sense of why this setting is needed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its not well documented but I can make an educated guess. The exec server runs a lightweight program on the SSH host to help set up the files and create the server. I believe it uses log files to make the initial communication. By default, all of the server files are dropped onto the home directory. The problem with CAEN is that the home directory is on the network, and I think sometimes issues arise with file creation/deletion while the exec server is also running. Turning off the exec server seems directly create the server without these issues.

Alternatively, we could change the settings to put the server files in another directory (maybe /tmp/?) or point towards the troubleshooting step to kill the exec server via terminal ssh if you can't connect.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very reasonable guess. I agree.


<img src="images/remotessh_02.png" width="768px" />

Search for "Flock" and disable the "Use Flock" option.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question about the meaning of this setting.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to above. CAEN home directory is on the network and sometimes issues arise when creating locks on files. I initially used this setting because someone on Piazza suggested it when I was taking EECS 482, but I discovered there's actually another setting that is specifically for this type of situation. Just changed this section based on that.


<img src="images/remotessh_11.png" width="768px" />


## Connect to CAEN
### Connect
Click the remote connection button on the bottom left and then click the "Connect to Host..." option.

<img src="images/remotessh_03.png" width="768px" />

Click on the "caen" option (this is the SSH host that we set up [earlier](#edit-ssh-config)).

<div class="primer-spec-callout info" markdown="1">
If you want to connect to some other host in the future, you can manually specify `user@host` in this box too (e.g. `[email protected]`).
</div>

<img src="images/remotessh_04.png" width="768px" />

Finally, you will be prompted for your CAEN password and Duo 2FA. The Duo 2FA prompt may be cut off. You can hover your mouse over the box and the full prompt will be shown.

<img src="images/remotessh_05.png" width="768px" />
<img src="images/remotessh_06.png" width="768px" />

Now, the button in the bottom left should say "SSH: caen" (or whatever host you specified earlier).

<img src="images/remotessh_07.png" width="768px" />


### Open Workspace
Now you can open a folder from your CAEN home directory as a workspace.

<img src="images/remotessh_08.png" width="768px" />

Browse to your chosen directory and click "OK".

<img src="images/remotessh_09.png" width="768px" />

Now you should be able to work on CAEN!

<img src="images/remotessh_10.png" width="768px" />



## Troubleshooting
If you are suddenly unable to connect, you can try deleting the VS Code server files. Sometimes the files that VS Code drops onto the remote host don't get cleaned up properly and it tries to reuse an unreachable remote server. SSH into CAEN and execute the following:

```console
$ ssh [email protected]
...
$ mv ~/.vscode-server ~/.vscode-old
$ rm -rf ~/.vscode-old
```

Restart VS Code on your own computer and [try again](#connect-to-caen).


## Acknowledgments
Original tutorial written by Anish Nyayachavadi for EECS 491.

This document is licensed under a [Creative Commons Attribution-NonCommercial 4.0 License](https://creativecommons.org/licenses/by-nc/4.0/). You’re free to copy and share this document, but not to sell it. You may not share source code provided with this document.
Loading