Merge branch '3463-make-sharing-dialog-with-users-more-useful' closes #3463
[arvados.git] / doc / user / getting_started / ssh-access-unix.html.textile.liquid
1 ---
2 layout: default
3 navsection: userguide
4 title: Accessing an Arvados VM with SSH - Unix Environments
5 ...
6
7 This document is for Unix environments (Linux, OS X, Cygwin). If you are using a Windows environment, please visit the "Accessing an Arvados VM with SSH - Windows Environments":ssh-access-windows.html page.
8
9 {% include 'ssh_intro' %}
10
11 h1(#gettingkey). Getting your SSH key
12
13 h3(#unix). Generate a key using ssh-keygen
14
15 Start by opening a terminal window.  Check if you have an existing public key:
16
17 notextile. <pre><code>$ <span class="userinput">ls ~/.ssh/id_rsa.pub</span></code></pre>
18
19 If the file @id_rsa.pub@ exists, then you may use your existing key.  Copy the contents of @~/.ssh/id_rsa.pub@ onto the clipboard (this is your public key).  You can skip the rest of this section and proceed by "adding your key to the Arvados Workbench.":#workbench
20
21 If there is no file @~/.ssh/id_rsa.pub@, you must generate a new key.  Use @ssh-keygen@ to do this:
22
23 <notextile>
24 <pre><code>$ <span class="userinput">ssh-keygen -t rsa -C "you@example.com"</span>
25 Generating public/private rsa key pair.
26 Enter file in which to save the key (/home/example/.ssh/id_rsa):
27 Enter passphrase (empty for no passphrase):
28 Enter same passphrase again:
29 </code></pre>
30 </notextile>
31
32 * @-t@ specifies the key type (must be "rsa")
33 * @-C@ specifies a comment (to remember which account the key is associated with)
34
35 We strongly recommend that you protect your key with a passphrase.  This means that when the key is used, you will be required to enter the passphrase.  However, unlike logging into remote system using a password, the passphrase is never sent over the network, it is only used to decrypt your private key.
36
37 Display the contents of @~/.ssh/id_rsa.pub@ (this is your public key) using @cat@ and then copy it onto the clipboard:
38
39 <notextile>
40 <pre><code>$ <span class="userinput">cat ~/.ssh/id_rsa.pub</span>
41 ssh-rsa AAAAB3NzaC1ycEDoNotUseExampleKeyDoNotUseExampleKeyDoNotUseExampleKeyDoNotUse9lmzkpBq983bQradKGT3LuKda9QOGe8MatI6wzSrJLSGhHm3hk6D8OWWUG4SneuCtKIk2bH0pgBj1G29+uzDIez90WzfCTZKbz4RcVQmPkowSSUAQDwb0ffwvRDhCgcJ1loT1wQAJzqJmljQ7xEYaCOIMqnfYE0lX7B3MSvCV6Ie2rWL33YecLp48LVtqiCOZU4XRyO8RSDFRFLVW+mjkLirwtDHZCRtORScaIEN0jw51p+T+9X5iA9QH/Mn+xlgk7fCgH+JtpBj808N/Qds2Gpff+Kb6ulUrVVfMK6L you@example.com
42 </code></pre>
43 </notextile>
44
45 Now you can set up @ssh-agent@ (next) or proceed with "adding your key to the Arvados Workbench.":#workbench
46
47 h3. Set up ssh-agent (recommended)
48
49 If you find you are entering your passphrase frequently, you can use @ssh-agent@ to manage your credentials.  Use @ssh-add -l@ to test if you already have ssh-agent running:
50
51 notextile. <pre><code>$ <span class="userinput">ssh-add -l</span></code></pre>
52
53 If you get the error "Could not open a connection to your authentication agent" you will need to run @ssh-agent@ with the following command:
54
55 notextile. <pre><code>$ <span class="userinput">eval $(ssh-agent -s)</span></code></pre>
56
57 @ssh-agent -s@ prints out values for environment variables SSH_AUTH_SOCK and SSH_AGENT_PID and then runs in the background.  Using "eval" on the output as shown here causes those variables to be set in the current shell environment so that subsequent calls to SSH can discover how to access the agent process.
58
59 After running @ssh-agent@, or if @ssh-add -l@ prints "The agent has no identities", add your key using the following command.  The passphrase to decrypt the key is the same used to protect the key when it was created with @ssh-keygen@:
60
61 <notextile>
62 <pre><code>$ <span class="userinput">ssh-add</span>
63 Enter passphrase for /home/example/.ssh/id_rsa:
64 Identity added: /home/example/.ssh/id_rsa (/home/example/.ssh/id_rsa)
65 </code></pre>
66 </notextile>
67
68 When everything is set up, @ssh-add -l@ should yield output that looks something like this:
69
70 <notextile>
71 <pre><code>$ <span class="userinput">ssh-add -l</span>
72 2048 eb:fa:15:f2:44:26:95:58:37:37:f4:aa:ff:ee:c2:85 you@example.com (RSA)
73 </code></pre>
74 </notextile>
75
76 {% include 'ssh_addkey' %}
77
78 h3. Connecting to the virtual machine
79
80 Use the following command to connect to the _shell_ VM instance as _you_.  Replace *<code>you@shell</code>* at the end of the following command with your *login* and *hostname* from Workbench:
81
82 notextile. <pre><code>$ <span class="userinput">ssh -o "ProxyCommand ssh -a -x -p2222 turnout@switchyard.{{ site.arvados_api_host }} <b>shell</b>" -A -x <b>you@shell</b></span></code></pre>
83
84 This command does several things at once. You usually cannot log in directly to virtual machines over the public Internet.  Instead, you log into a "switchyard" server and then tell the switchyard which virtual machine you want to connect to.
85
86 * @-o "ProxyCommand ..."@ configures SSH to run the specified command to create a proxy and route your connection through it.
87 * @-a@ tells SSH not to forward your ssh-agent credentials to the switchyard.
88 * @-x@ tells SSH not to forward your X session to the switchyard.
89 * @-p2222@ specifies that the switchyard is running on non-standard port 2222.
90 * <code>turnout@switchyard.{{ site.arvados_api_host }}</code> specifies the user (@turnout@) and hostname (@switchyard.{{ site.arvados_api_host }}@) of the switchyard server that will proxy our connection to the VM.
91 * *@shell@* is the name of the VM that we want to connect to.  This is sent to the switchyard server as if it were an SSH command, and the switchyard server connects to the VM on our behalf.
92 * After the ProxyCommand section, we repeat @-x@ to disable X session forwarding to the virtual machine.
93 * @-A@ specifies that we want to forward access to @ssh-agent@ to the VM.
94 * Finally, *<code>you@shell</code>* specifies your login name and repeats the hostname of the VM.  The username can be found in the *logins* column in the VMs Workbench page, discussed in the previous section.
95
96 You should now be able to log into the Arvados VM and "check your environment.":check-environment.html
97
98 h3. Configuration (recommended)
99
100 The command line above is cumbersome, but you can configure SSH to remember many of these settings.  Add this text to the file @.ssh/config@ in your home directory (create a new file if @.ssh/config@ doesn't exist):
101
102 <notextile>
103 <pre><code class="userinput">Host *.arvados
104   ProxyCommand ssh -a -x -p2222 turnout@switchyard.{{ site.arvados_api_host }} $SSH_PROXY_FLAGS %h
105   User <b>you</b>
106   ForwardAgent yes
107   ForwardX11 no
108 </code></pre>
109 </notextile>
110
111 This will recognize any host ending in ".arvados" and automatically apply the proxy, user and forwarding settings from the configuration file, allowing you to log in with a much simpler command:
112
113 notextile. <pre><code>$ <span class="userinput">ssh <b>shell</b>.arvados</span></code></pre>
114
115 You should now be able to log into the Arvados VM and "check your environment.":check-environment.html