<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.isi.jhu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jcarrigan</id>
	<title>ISI Support Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.isi.jhu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jcarrigan"/>
	<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=Special:Contributions/Jcarrigan"/>
	<updated>2026-05-11T18:54:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=SSH&amp;diff=273</id>
		<title>SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=SSH&amp;diff=273"/>
		<updated>2020-05-28T16:03:00Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: /* Preventing Disconnects on JHU Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hacking]]&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:SE Fundamentals]]&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
From the SSH &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; page:&lt;br /&gt;
&lt;br /&gt;
    ssh (SSH client) is a program for logging into a remote machine and for executing commands on a remote machine.  It is intended to provide secure encrypted communications between two untrusted hosts over an insecure network.  X11 connections, arbitrary TCP ports and UNIX-domain sockets can also be forwarded over the secure channel.&lt;br /&gt;
&lt;br /&gt;
The information provided on this page only covers a small portion of the things you can do with SSH and it is recommended that you read more about it via the &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; page or otherwise.&lt;br /&gt;
&lt;br /&gt;
= Required Client Software =&lt;br /&gt;
&lt;br /&gt;
== Linux/Unix/macOS ==&lt;br /&gt;
OpenSSH is typically packaged with most unix and linux variants, which includes macOS. You can verify that ssh is installed by opening a terminal and running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -V&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
Since April of 2018, SSH comes pre-installed in Microsoft Windows 10 and above and can be used via the command line. More information can be found [https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview here].&lt;br /&gt;
&lt;br /&gt;
= Using SSH =&lt;br /&gt;
&lt;br /&gt;
== Connecting to a Remote System ==&lt;br /&gt;
Once you have confirmed that an SSH client is installed on your system, you can create a basic connection to a remote server using the following syntax:&lt;br /&gt;
&lt;br /&gt;
    $ ssh username@server.host.name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When typing your password, nothing will appear in the terminal. If you think you mistyped your password, you can press &amp;lt;code&amp;gt;Ctrl+U&amp;lt;/code&amp;gt; to clear the input and try again.&lt;br /&gt;
&lt;br /&gt;
== Using an Alternative Port ==&lt;br /&gt;
The default connection port for SSH is TCP port 22, but sometimes you&#039;ll need to use an alternative port for any number of reasons.  To do this, you can use the &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; parameter. For example, if you need to connect on TCP port 2222:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -p 2222 username@server.host.name&lt;br /&gt;
&lt;br /&gt;
== Connecting with Key-Based Authentication ==&lt;br /&gt;
A very common authentication method built into SSH is key-based authentication. Instead of using a password to authenticate, a server may pre-authenticate a client by installing a public key. This system is far more secure than basic password authentication and is used on all ISI systems.&lt;br /&gt;
&lt;br /&gt;
=== Generating a Key Pair ===&lt;br /&gt;
In order to configure key-based authentication for a server, you will need to generate a key pair. To do this, you use the &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; command. Running this command will invoke a &amp;quot;wizard&amp;quot; that will guide you through the key generation process for an RSA key pair:&lt;br /&gt;
&lt;br /&gt;
    $ ssh-keygen&lt;br /&gt;
    Generating public/private rsa key pair.&lt;br /&gt;
    Enter file in which to save the key (/Users/isiadmin/.ssh/id_rsa):&lt;br /&gt;
&lt;br /&gt;
If you have never created an ssh key pair before, you can leave this blank. The default location of ssh keys is &amp;lt;code&amp;gt;~/.ssh/&amp;lt;/code&amp;gt;, but you can put them anywhere you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
    Enter passphrase (empty for no passphrase):&lt;br /&gt;
&lt;br /&gt;
We recommend setting a password for your private key. In the event that your private key is leaked, it could be used to log into any system having the matching public key configured. This helps to mitigate that risk. If nothing else, it will give you more time to revoke your old keys from your servers.&lt;br /&gt;
&lt;br /&gt;
    Your identification has been saved in /example_directory/id_rsa.&lt;br /&gt;
    Your public key has been saved in /example_directory/id_rsa.pub.&lt;br /&gt;
    The key fingerprint is:&lt;br /&gt;
    SHA256:pNeh9us0L5yTaMoK9s86gOSHzNr/j2iXyzqqWxWmHs0 user@local.machine&lt;br /&gt;
    The key&#039;s randomart image is:&lt;br /&gt;
    +---[RSA 2048]----+&lt;br /&gt;
    |                 |&lt;br /&gt;
    |                 |&lt;br /&gt;
    |    o   . .      |&lt;br /&gt;
    | . = . o o .     |&lt;br /&gt;
    |=.+ E . S .      |&lt;br /&gt;
    |.*.+   o .       |&lt;br /&gt;
    |..*.   . o+o     |&lt;br /&gt;
    |.o.o+=o.o.*+     |&lt;br /&gt;
    |oo.+BXX=..oo.    |&lt;br /&gt;
    +----[SHA256]-----+&lt;br /&gt;
&lt;br /&gt;
Once the command finishes, it will generate both a private key and public key.  The public key will have the same name as your private key with a &amp;lt;code&amp;gt;.pub&amp;lt;/code&amp;gt; filename extension.&lt;br /&gt;
&lt;br /&gt;
Your private key is to be kept securely on your local system. &#039;&#039;&#039;You should never transmit your private key over any network that may be monitored.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Your public key, on the other hand, may be safely transmitted in clear text. This key is used to encrypt data that can only be decrypted with the matching private key. The contents of the file should look similar to this:&lt;br /&gt;
&lt;br /&gt;
    ssh-rsa ...[Random Base64-Encoded Data]... user@local.machine&lt;br /&gt;
&lt;br /&gt;
This is what you&#039;ll need to give the administrator of the SSH server you&#039;re attempting to connect to. You can safely send this in an email.&lt;br /&gt;
&lt;br /&gt;
=== Using a Private Key ===&lt;br /&gt;
If you let the &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; command store the key in the default location (&amp;lt;code&amp;gt;~/.ssh/id_rsa&amp;lt;/code&amp;gt;), it will automatically be used when you connect. If you chose to install it someplace else (or simply have different keys for different systems), you&#039;ll need to indicate which key to use by using the &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt; parameter:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -i /path/to/id_rsa username@server.host.name&lt;br /&gt;
&lt;br /&gt;
== X11 Forwarding ==&lt;br /&gt;
SSH isn&#039;t just for running remote terminal sessions.  It can also be used to run GUI applications remotely.  You can do this using a system called X11 Forwarding.&lt;br /&gt;
&lt;br /&gt;
=== Required Client Software ===&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
If you&#039;re running a GUI on linux, you probably already have X installed.  You can verify with the following command:&lt;br /&gt;
&lt;br /&gt;
    $ Xorg -version&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
For X forwarding to work properly on Microsoft Windows, you will need to install an X window server.  I recommend using [https://sourceforge.net/projects/vcxsrv/ VcXsrv].&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
Even though macOS is technically running a variation of X, you won&#039;t be able to use it for standard X applications like SSH.  In order to accomplish this, you can install [https://www.xquartz.org/ XQuartz].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using X11 Forwarding ===&lt;br /&gt;
In order to enable X11 Forwarding in your SSH connection, you will need to use the &amp;lt;code&amp;gt;-X&amp;lt;/code&amp;gt; parameter:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -X username@server.host.name&lt;br /&gt;
&lt;br /&gt;
Once the session is established, you should be able to invoke any GUI application simply by executing the command.&lt;br /&gt;
&lt;br /&gt;
== Port Forwarding ==&lt;br /&gt;
SSH has the ability to forward TCP traffic over the connection to enable the client to connect to resources on the remote system or vice versa.&lt;br /&gt;
&lt;br /&gt;
=== Local Port Forwarding ===&lt;br /&gt;
If you want to connect to a service that is only accessible via the server you&#039;re connecting to, but want to be able to access it on your local PC, you can accomplish this using a local port forward using the &amp;lt;code&amp;gt;-L&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
    $ ssh -L local_port:remote_hostname:remote_port username@server.host.name&lt;br /&gt;
&lt;br /&gt;
Let&#039;s assume the server you&#039;re connecting to has access to a mysql server that only accepts connections on port 3389 from your server, but you want to be able to use the management tool on your laptop to be able to make a change to the database.  You can run the following command:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -L 3390:mysql.remote.host:3389 username@server.host.name&lt;br /&gt;
&lt;br /&gt;
This will open a local socket on TCP port 3390 and forward all traffic to remote socket on the SSH server.  If you point your mysql tool to &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt; on port 3390, the SSH server will attempt to connect to mysql.remote.host on TCP port 3389 and forward all traffic back through the tunnel to your client.&lt;br /&gt;
&lt;br /&gt;
=== Remote Port Forwarding ===&lt;br /&gt;
If you have a local service that you want the server to be able to access, you can accomplish this using the &amp;lt;code&amp;gt;-R&amp;lt;/code&amp;gt; parameter to invoke a remote port forward.&lt;br /&gt;
&lt;br /&gt;
    $ ssh -R remote_port:local_hostname:local_port username@server.host.name&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you&#039;re trying to download the latest version of nmap on your server, but the domain is blocked by the network security team. You can allow the server to connect through your own connection instead by using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -R 8080:insecure.org:80 username@server.host.name&lt;br /&gt;
&lt;br /&gt;
On the server, you can now connect to 127.0.0.1 on port 8080, which will allow you download your software.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Port Forwarding ===&lt;br /&gt;
In the event that there are a bunch of resources you need that are only available on the server&#039;s network, you can create a dynamic port forward using the &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -D local_port username@server.host.name&lt;br /&gt;
&lt;br /&gt;
This will create a SOCKS5 proxy on the local port specified to be able to filter traffic through the server.  This is a great way to create a very simple VPN.&lt;br /&gt;
&lt;br /&gt;
== SSH Config ==&lt;br /&gt;
There are a lot of parameters you can set for your SSH connections, and remembering them can be a chore.  Fortunately there is an easy way to do this with SSH&#039;s client configuration file.&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
Typically the file can be found at &amp;lt;code&amp;gt;~/.ssh/config&amp;lt;/code&amp;gt;. If you&#039;d like to save it in another location or have different config files, you can specify which to use with the &amp;lt;code&amp;gt;-F&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -F /path/to/config username@server.host.name&lt;br /&gt;
&lt;br /&gt;
If the file does not already exist, you can safely create it. Just make sure to set the appropriate permissions on the file.  The &amp;lt;code&amp;gt;.ssh&amp;lt;/code&amp;gt; directory should be be set to Read, Write, and Enter for the owner only, and any config files should be set to Read and Write for the owner only:&lt;br /&gt;
&lt;br /&gt;
    $ mkdir ~/.ssh&lt;br /&gt;
    $ touch ~/.ssh/config&lt;br /&gt;
    $ chmod 700 ~/.ssh/&lt;br /&gt;
    $ chmod 600 ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The SSH config file has a relatively straightforward syntax:&lt;br /&gt;
&lt;br /&gt;
    # Comments are prefixed with a hash&lt;br /&gt;
    Host hostname&lt;br /&gt;
        ParameterName Value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; line is proceeded with the settings for that host. You can specify settings for multiple hosts with a new &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; line. For example:&lt;br /&gt;
&lt;br /&gt;
    # Server 1&lt;br /&gt;
    Host server1.host.name&lt;br /&gt;
        ParameterName Value&lt;br /&gt;
    &lt;br /&gt;
    # Server 2&lt;br /&gt;
    Host server2.host.name&lt;br /&gt;
        ParameterName Value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you connect to a host, SSH will scan the config file to determine if there is a matching &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; entry for the server you&#039;re attempting to connect to.  This allows us to use a wildcard character (*) in this field for pattern matching.  For example:&lt;br /&gt;
&lt;br /&gt;
    # Default settings for all hosts we connect to:&lt;br /&gt;
    Host *&lt;br /&gt;
        Parameter1 Value&lt;br /&gt;
    &lt;br /&gt;
    # Default settings for any systems we connect to at jhu.edu:&lt;br /&gt;
    Host *.jhu.edu&lt;br /&gt;
        Parameter2 Value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If multiple patterns match a host, the settings will stack.  In this case, any host matching &amp;lt;code&amp;gt;Host *.jhu.edu&amp;lt;/code&amp;gt; also matches &amp;lt;code&amp;gt;Host *&amp;lt;/code&amp;gt;, so the settings from both will apply.&lt;br /&gt;
&lt;br /&gt;
You can find a list of all parameters available in the [https://linux.die.net/man/5/ssh ssh(5) Man Page].&lt;br /&gt;
&lt;br /&gt;
=== Useful Examples ===&lt;br /&gt;
==== Preventing Disconnects on JHU Servers ====&lt;br /&gt;
The primary firewall maintained by JHU IT gets millions of connections going through it at time, so reducing the number of stale connections is important to prevent the networks from becoming overloaded.  Unfortunately, this can cause some issues with SSH connections if they don&#039;t see enough activity.  We can prevent this from happening by using the &amp;lt;code&amp;gt;ServerAliveInterval&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ServerAliveCountMax&amp;lt;/code&amp;gt; parameters.&lt;br /&gt;
&lt;br /&gt;
From the [https://linux.die.net/man/5/ssh ssh(5) Man Page]:&lt;br /&gt;
&lt;br /&gt;
    &#039;&#039;&#039;ServerAliveCountMax&#039;&#039;&#039;&lt;br /&gt;
    Sets the number of server alive messages (see below) which may be sent without ssh(1) receiving any messages back from the server. If this threshold is reached while server alive messages are being sent, ssh will disconnect from the server, terminating the session. It is important to note that the use of server alive messages is very different from TCPKeepAlive (below). The server alive messages are sent through the encrypted channel and therefore will not be spoofable. The TCP keepalive option enabled by TCPKeepAlive is spoofable. The server alive mechanism is valuable when the client or server depend on knowing when a connection has become inactive.&lt;br /&gt;
    &lt;br /&gt;
    The default value is 3. If, for example, ServerAliveInterval (see below) is set to 15 and ServerAliveCountMax is left at the default, if the server becomes unresponsive, ssh will disconnect after approximately 45 seconds. This option applies to protocol version 2 only. &lt;br /&gt;
    &lt;br /&gt;
    &#039;&#039;&#039;ServerAliveInterval&#039;&#039;&#039;&lt;br /&gt;
    Sets a timeout interval in seconds after which if no data has been received from the server, ssh(1) will send a message through the encrypted channel to request a response from the server. The default is 0, indicating that these messages will not be sent to the server. This option applies to protocol version 2 only. &lt;br /&gt;
&lt;br /&gt;
What we&#039;re going to do is enable a &amp;lt;code&amp;gt;ServerAliveInterval&amp;lt;/code&amp;gt; that sends every 30 seconds and increase the &amp;lt;code&amp;gt;ServerAliveCountMax&amp;lt;/code&amp;gt; from 3 to 5 just for a little extra buffer.&lt;br /&gt;
&lt;br /&gt;
    # Settings for all JHU hosts&lt;br /&gt;
    Host *.jhu.edu&lt;br /&gt;
        ServerAliveInterval 30&lt;br /&gt;
        ServerAliveCountMax 5&lt;br /&gt;
&lt;br /&gt;
To keep sessions alive on PuTTY in Windows, in the &amp;quot;Connection&amp;quot; section of the settings for the session, set the &amp;quot;Seconds between keepalives&amp;quot; setting to 30.&lt;br /&gt;
&lt;br /&gt;
==== Giving a Connection a Nickname ====&lt;br /&gt;
Lets say you have a number of connections that have some really hard to remember hostnames or that need different kinds of parameters on the same server.  Since the config file is a pattern match of the command line parameter, we can hijack it to specify which server we &#039;&#039;&#039;actually&#039;&#039;&#039; want to connect to by using &amp;lt;code&amp;gt;HostName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
From the [https://linux.die.net/man/5/ssh ssh(5) Man Page]:&lt;br /&gt;
&lt;br /&gt;
    &#039;&#039;&#039;HostName&#039;&#039;&#039;&lt;br /&gt;
    Specifies the real host name to log into. This can be used to specify nicknames or abbreviations for hosts. The default is the name given on the command line. Numeric IP addresses are also permitted (both on the command line and in HostName specifications). &lt;br /&gt;
&lt;br /&gt;
Assume we have the following config file:&lt;br /&gt;
&lt;br /&gt;
    # My Cloud Server&lt;br /&gt;
    Host thecloud&lt;br /&gt;
        HostName mycloudserver42.ny2.us-east.us.americas.major-isp.tld&lt;br /&gt;
        Port 2222&lt;br /&gt;
        User myclouduser&lt;br /&gt;
        IdentityFile ~/.ssh/id_rsa.cloud&lt;br /&gt;
&lt;br /&gt;
Now instead of typing this:&lt;br /&gt;
&lt;br /&gt;
    # ssh -p 2222 -i ~/.ssh/id_rsa.cloud myclouduser@mycloudserver42.ny2.us-east.us.americas.major-isp.tld&lt;br /&gt;
&lt;br /&gt;
We can type this and it will do the same thing:&lt;br /&gt;
&lt;br /&gt;
    # ssh thecloud&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Additional Resources =&lt;br /&gt;
* [https://linux.die.net/man/1/ssh ssh(1) Man Page]&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=SSH&amp;diff=272</id>
		<title>SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=SSH&amp;diff=272"/>
		<updated>2020-05-28T10:16:48Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: /* Connecting with Key-Based Authentication */  Corrected a key type error in the text.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hacking]]&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:SE Fundamentals]]&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
From the SSH &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; page:&lt;br /&gt;
&lt;br /&gt;
    ssh (SSH client) is a program for logging into a remote machine and for executing commands on a remote machine.  It is intended to provide secure encrypted communications between two untrusted hosts over an insecure network.  X11 connections, arbitrary TCP ports and UNIX-domain sockets can also be forwarded over the secure channel.&lt;br /&gt;
&lt;br /&gt;
The information provided on this page only covers a small portion of the things you can do with SSH and it is recommended that you read more about it via the &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; page or otherwise.&lt;br /&gt;
&lt;br /&gt;
= Required Client Software =&lt;br /&gt;
&lt;br /&gt;
== Linux/Unix/macOS ==&lt;br /&gt;
OpenSSH is typically packaged with most unix and linux variants, which includes macOS. You can verify that ssh is installed by opening a terminal and running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -V&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
Since April of 2018, SSH comes pre-installed in Microsoft Windows 10 and above and can be used via the command line. More information can be found [https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview here].&lt;br /&gt;
&lt;br /&gt;
= Using SSH =&lt;br /&gt;
&lt;br /&gt;
== Connecting to a Remote System ==&lt;br /&gt;
Once you have confirmed that an SSH client is installed on your system, you can create a basic connection to a remote server using the following syntax:&lt;br /&gt;
&lt;br /&gt;
    $ ssh username@server.host.name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When typing your password, nothing will appear in the terminal. If you think you mistyped your password, you can press &amp;lt;code&amp;gt;Ctrl+U&amp;lt;/code&amp;gt; to clear the input and try again.&lt;br /&gt;
&lt;br /&gt;
== Using an Alternative Port ==&lt;br /&gt;
The default connection port for SSH is TCP port 22, but sometimes you&#039;ll need to use an alternative port for any number of reasons.  To do this, you can use the &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; parameter. For example, if you need to connect on TCP port 2222:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -p 2222 username@server.host.name&lt;br /&gt;
&lt;br /&gt;
== Connecting with Key-Based Authentication ==&lt;br /&gt;
A very common authentication method built into SSH is key-based authentication. Instead of using a password to authenticate, a server may pre-authenticate a client by installing a public key. This system is far more secure than basic password authentication and is used on all ISI systems.&lt;br /&gt;
&lt;br /&gt;
=== Generating a Key Pair ===&lt;br /&gt;
In order to configure key-based authentication for a server, you will need to generate a key pair. To do this, you use the &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; command. Running this command will invoke a &amp;quot;wizard&amp;quot; that will guide you through the key generation process for an RSA key pair:&lt;br /&gt;
&lt;br /&gt;
    $ ssh-keygen&lt;br /&gt;
    Generating public/private rsa key pair.&lt;br /&gt;
    Enter file in which to save the key (/Users/isiadmin/.ssh/id_rsa):&lt;br /&gt;
&lt;br /&gt;
If you have never created an ssh key pair before, you can leave this blank. The default location of ssh keys is &amp;lt;code&amp;gt;~/.ssh/&amp;lt;/code&amp;gt;, but you can put them anywhere you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
    Enter passphrase (empty for no passphrase):&lt;br /&gt;
&lt;br /&gt;
We recommend setting a password for your private key. In the event that your private key is leaked, it could be used to log into any system having the matching public key configured. This helps to mitigate that risk. If nothing else, it will give you more time to revoke your old keys from your servers.&lt;br /&gt;
&lt;br /&gt;
    Your identification has been saved in /example_directory/id_rsa.&lt;br /&gt;
    Your public key has been saved in /example_directory/id_rsa.pub.&lt;br /&gt;
    The key fingerprint is:&lt;br /&gt;
    SHA256:pNeh9us0L5yTaMoK9s86gOSHzNr/j2iXyzqqWxWmHs0 user@local.machine&lt;br /&gt;
    The key&#039;s randomart image is:&lt;br /&gt;
    +---[RSA 2048]----+&lt;br /&gt;
    |                 |&lt;br /&gt;
    |                 |&lt;br /&gt;
    |    o   . .      |&lt;br /&gt;
    | . = . o o .     |&lt;br /&gt;
    |=.+ E . S .      |&lt;br /&gt;
    |.*.+   o .       |&lt;br /&gt;
    |..*.   . o+o     |&lt;br /&gt;
    |.o.o+=o.o.*+     |&lt;br /&gt;
    |oo.+BXX=..oo.    |&lt;br /&gt;
    +----[SHA256]-----+&lt;br /&gt;
&lt;br /&gt;
Once the command finishes, it will generate both a private key and public key.  The public key will have the same name as your private key with a &amp;lt;code&amp;gt;.pub&amp;lt;/code&amp;gt; filename extension.&lt;br /&gt;
&lt;br /&gt;
Your private key is to be kept securely on your local system. &#039;&#039;&#039;You should never transmit your private key over any network that may be monitored.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Your public key, on the other hand, may be safely transmitted in clear text. This key is used to encrypt data that can only be decrypted with the matching private key. The contents of the file should look similar to this:&lt;br /&gt;
&lt;br /&gt;
    ssh-rsa ...[Random Base64-Encoded Data]... user@local.machine&lt;br /&gt;
&lt;br /&gt;
This is what you&#039;ll need to give the administrator of the SSH server you&#039;re attempting to connect to. You can safely send this in an email.&lt;br /&gt;
&lt;br /&gt;
=== Using a Private Key ===&lt;br /&gt;
If you let the &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; command store the key in the default location (&amp;lt;code&amp;gt;~/.ssh/id_rsa&amp;lt;/code&amp;gt;), it will automatically be used when you connect. If you chose to install it someplace else (or simply have different keys for different systems), you&#039;ll need to indicate which key to use by using the &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt; parameter:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -i /path/to/id_rsa username@server.host.name&lt;br /&gt;
&lt;br /&gt;
== X11 Forwarding ==&lt;br /&gt;
SSH isn&#039;t just for running remote terminal sessions.  It can also be used to run GUI applications remotely.  You can do this using a system called X11 Forwarding.&lt;br /&gt;
&lt;br /&gt;
=== Required Client Software ===&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
If you&#039;re running a GUI on linux, you probably already have X installed.  You can verify with the following command:&lt;br /&gt;
&lt;br /&gt;
    $ Xorg -version&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
For X forwarding to work properly on Microsoft Windows, you will need to install an X window server.  I recommend using [https://sourceforge.net/projects/vcxsrv/ VcXsrv].&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
Even though macOS is technically running a variation of X, you won&#039;t be able to use it for standard X applications like SSH.  In order to accomplish this, you can install [https://www.xquartz.org/ XQuartz].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using X11 Forwarding ===&lt;br /&gt;
In order to enable X11 Forwarding in your SSH connection, you will need to use the &amp;lt;code&amp;gt;-X&amp;lt;/code&amp;gt; parameter:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -X username@server.host.name&lt;br /&gt;
&lt;br /&gt;
Once the session is established, you should be able to invoke any GUI application simply by executing the command.&lt;br /&gt;
&lt;br /&gt;
== Port Forwarding ==&lt;br /&gt;
SSH has the ability to forward TCP traffic over the connection to enable the client to connect to resources on the remote system or vice versa.&lt;br /&gt;
&lt;br /&gt;
=== Local Port Forwarding ===&lt;br /&gt;
If you want to connect to a service that is only accessible via the server you&#039;re connecting to, but want to be able to access it on your local PC, you can accomplish this using a local port forward using the &amp;lt;code&amp;gt;-L&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
    $ ssh -L local_port:remote_hostname:remote_port username@server.host.name&lt;br /&gt;
&lt;br /&gt;
Let&#039;s assume the server you&#039;re connecting to has access to a mysql server that only accepts connections on port 3389 from your server, but you want to be able to use the management tool on your laptop to be able to make a change to the database.  You can run the following command:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -L 3390:mysql.remote.host:3389 username@server.host.name&lt;br /&gt;
&lt;br /&gt;
This will open a local socket on TCP port 3390 and forward all traffic to remote socket on the SSH server.  If you point your mysql tool to &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt; on port 3390, the SSH server will attempt to connect to mysql.remote.host on TCP port 3389 and forward all traffic back through the tunnel to your client.&lt;br /&gt;
&lt;br /&gt;
=== Remote Port Forwarding ===&lt;br /&gt;
If you have a local service that you want the server to be able to access, you can accomplish this using the &amp;lt;code&amp;gt;-R&amp;lt;/code&amp;gt; parameter to invoke a remote port forward.&lt;br /&gt;
&lt;br /&gt;
    $ ssh -R remote_port:local_hostname:local_port username@server.host.name&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you&#039;re trying to download the latest version of nmap on your server, but the domain is blocked by the network security team. You can allow the server to connect through your own connection instead by using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -R 8080:insecure.org:80 username@server.host.name&lt;br /&gt;
&lt;br /&gt;
On the server, you can now connect to 127.0.0.1 on port 8080, which will allow you download your software.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Port Forwarding ===&lt;br /&gt;
In the event that there are a bunch of resources you need that are only available on the server&#039;s network, you can create a dynamic port forward using the &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -D local_port username@server.host.name&lt;br /&gt;
&lt;br /&gt;
This will create a SOCKS5 proxy on the local port specified to be able to filter traffic through the server.  This is a great way to create a very simple VPN.&lt;br /&gt;
&lt;br /&gt;
== SSH Config ==&lt;br /&gt;
There are a lot of parameters you can set for your SSH connections, and remembering them can be a chore.  Fortunately there is an easy way to do this with SSH&#039;s client configuration file.&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
Typically the file can be found at &amp;lt;code&amp;gt;~/.ssh/config&amp;lt;/code&amp;gt;. If you&#039;d like to save it in another location or have different config files, you can specify which to use with the &amp;lt;code&amp;gt;-F&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
&lt;br /&gt;
    $ ssh -F /path/to/config username@server.host.name&lt;br /&gt;
&lt;br /&gt;
If the file does not already exist, you can safely create it. Just make sure to set the appropriate permissions on the file.  The &amp;lt;code&amp;gt;.ssh&amp;lt;/code&amp;gt; directory should be be set to Read, Write, and Enter for the owner only, and any config files should be set to Read and Write for the owner only:&lt;br /&gt;
&lt;br /&gt;
    $ mkdir ~/.ssh&lt;br /&gt;
    $ touch ~/.ssh/config&lt;br /&gt;
    $ chmod 700 ~/.ssh/&lt;br /&gt;
    $ chmod 600 ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The SSH config file has a relatively straightforward syntax:&lt;br /&gt;
&lt;br /&gt;
    # Comments are prefixed with a hash&lt;br /&gt;
    Host hostname&lt;br /&gt;
        ParameterName Value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; line is proceeded with the settings for that host. You can specify settings for multiple hosts with a new &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; line. For example:&lt;br /&gt;
&lt;br /&gt;
    # Server 1&lt;br /&gt;
    Host server1.host.name&lt;br /&gt;
        ParameterName Value&lt;br /&gt;
    &lt;br /&gt;
    # Server 2&lt;br /&gt;
    Host server2.host.name&lt;br /&gt;
        ParameterName Value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you connect to a host, SSH will scan the config file to determine if there is a matching &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; entry for the server you&#039;re attempting to connect to.  This allows us to use a wildcard character (*) in this field for pattern matching.  For example:&lt;br /&gt;
&lt;br /&gt;
    # Default settings for all hosts we connect to:&lt;br /&gt;
    Host *&lt;br /&gt;
        Parameter1 Value&lt;br /&gt;
    &lt;br /&gt;
    # Default settings for any systems we connect to at jhu.edu:&lt;br /&gt;
    Host *.jhu.edu&lt;br /&gt;
        Parameter2 Value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If multiple patterns match a host, the settings will stack.  In this case, any host matching &amp;lt;code&amp;gt;Host *.jhu.edu&amp;lt;/code&amp;gt; also matches &amp;lt;code&amp;gt;Host *&amp;lt;/code&amp;gt;, so the settings from both will apply.&lt;br /&gt;
&lt;br /&gt;
You can find a list of all parameters available in the [https://linux.die.net/man/5/ssh ssh(5) Man Page].&lt;br /&gt;
&lt;br /&gt;
=== Useful Examples ===&lt;br /&gt;
==== Preventing Disconnects on JHU Servers ====&lt;br /&gt;
The primary firewall maintained by JHU IT gets millions of connections going through it at time, so reducing the number of stale connections is important to prevent the networks from becoming overloaded.  Unfortunately, this can cause some issues with SSH connections if they don&#039;t see enough activity.  We can prevent this from happening by using the &amp;lt;code&amp;gt;ServerAliveInterval&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ServerAliveCountMax&amp;lt;/code&amp;gt; parameters.&lt;br /&gt;
&lt;br /&gt;
From the [https://linux.die.net/man/5/ssh ssh(5) Man Page]:&lt;br /&gt;
&lt;br /&gt;
    &#039;&#039;&#039;ServerAliveCountMax&#039;&#039;&#039;&lt;br /&gt;
    Sets the number of server alive messages (see below) which may be sent without ssh(1) receiving any messages back from the server. If this threshold is reached while server alive messages are being sent, ssh will disconnect from the server, terminating the session. It is important to note that the use of server alive messages is very different from TCPKeepAlive (below). The server alive messages are sent through the encrypted channel and therefore will not be spoofable. The TCP keepalive option enabled by TCPKeepAlive is spoofable. The server alive mechanism is valuable when the client or server depend on knowing when a connection has become inactive.&lt;br /&gt;
    &lt;br /&gt;
    The default value is 3. If, for example, ServerAliveInterval (see below) is set to 15 and ServerAliveCountMax is left at the default, if the server becomes unresponsive, ssh will disconnect after approximately 45 seconds. This option applies to protocol version 2 only. &lt;br /&gt;
    &lt;br /&gt;
    &#039;&#039;&#039;ServerAliveInterval&#039;&#039;&#039;&lt;br /&gt;
    Sets a timeout interval in seconds after which if no data has been received from the server, ssh(1) will send a message through the encrypted channel to request a response from the server. The default is 0, indicating that these messages will not be sent to the server. This option applies to protocol version 2 only. &lt;br /&gt;
&lt;br /&gt;
What we&#039;re going to do is enable a &amp;lt;code&amp;gt;ServerAliveInterval&amp;lt;/code&amp;gt; that sends every 30 seconds and increase the &amp;lt;code&amp;gt;ServerAliveCountMax&amp;lt;/code&amp;gt; from 3 to 5 just for a little extra buffer.&lt;br /&gt;
&lt;br /&gt;
    # Settings for all JHU hosts&lt;br /&gt;
    Host *.jhu.edu&lt;br /&gt;
        ServerAliveInterval 30&lt;br /&gt;
        ServerAliveCountMax 5&lt;br /&gt;
&lt;br /&gt;
==== Giving a Connection a Nickname ====&lt;br /&gt;
Lets say you have a number of connections that have some really hard to remember hostnames or that need different kinds of parameters on the same server.  Since the config file is a pattern match of the command line parameter, we can hijack it to specify which server we &#039;&#039;&#039;actually&#039;&#039;&#039; want to connect to by using &amp;lt;code&amp;gt;HostName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
From the [https://linux.die.net/man/5/ssh ssh(5) Man Page]:&lt;br /&gt;
&lt;br /&gt;
    &#039;&#039;&#039;HostName&#039;&#039;&#039;&lt;br /&gt;
    Specifies the real host name to log into. This can be used to specify nicknames or abbreviations for hosts. The default is the name given on the command line. Numeric IP addresses are also permitted (both on the command line and in HostName specifications). &lt;br /&gt;
&lt;br /&gt;
Assume we have the following config file:&lt;br /&gt;
&lt;br /&gt;
    # My Cloud Server&lt;br /&gt;
    Host thecloud&lt;br /&gt;
        HostName mycloudserver42.ny2.us-east.us.americas.major-isp.tld&lt;br /&gt;
        Port 2222&lt;br /&gt;
        User myclouduser&lt;br /&gt;
        IdentityFile ~/.ssh/id_rsa.cloud&lt;br /&gt;
&lt;br /&gt;
Now instead of typing this:&lt;br /&gt;
&lt;br /&gt;
    # ssh -p 2222 -i ~/.ssh/id_rsa.cloud myclouduser@mycloudserver42.ny2.us-east.us.americas.major-isp.tld&lt;br /&gt;
&lt;br /&gt;
We can type this and it will do the same thing:&lt;br /&gt;
&lt;br /&gt;
    # ssh thecloud&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Additional Resources =&lt;br /&gt;
* [https://linux.die.net/man/1/ssh ssh(1) Man Page]&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=Raspberrypi&amp;diff=189</id>
		<title>Raspberrypi</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=Raspberrypi&amp;diff=189"/>
		<updated>2019-02-11T14:27:21Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: Jcarrigan moved page Raspberrypi to Raspberry Pi: To show properly in other pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=Raspberry_Pi&amp;diff=188</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=Raspberry_Pi&amp;diff=188"/>
		<updated>2019-02-11T14:27:21Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: Jcarrigan moved page Raspberrypi to Raspberry Pi: To show properly in other pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
This document will help you configure a Raspberry Pi 2B or 3B&lt;br /&gt;
== Windows ==&lt;br /&gt;
=== Required Software ===&lt;br /&gt;
To set up a Raspberry Pi from a Windows system you will require the following software:&lt;br /&gt;
*SD Memory Card Formatter from the SD Association (https://www.sdcard.org/downloads/formatter_4/eula_windows/SDCardFormatterv5_WinEN.zip)&lt;br /&gt;
*Win32 Disk Imager (https://sourceforge.net/projects/win32diskimager/) for installing operating systems other than Raspian via NOOBs&lt;br /&gt;
*The Operating System you wish to install on the Raspberry Pi&lt;br /&gt;
**NOOBS (https://www.raspberrypi.org/downloads/noobs/) installs Raspian, LebreELEC or some other OSs from the internet.&lt;br /&gt;
**Kali Linux or any other OS for Raspberry Pi(https://www.offensive-security.com/kali-linux-arm-images/) requires the use of Win32 Disk &lt;br /&gt;
=== Format SD Card ===&lt;br /&gt;
First you must format the SD card.  &#039;&#039;&#039;THIS WILL ERASE ALL EXISTING DATA ON THE SD CARD&#039;&#039;&#039;.  Format the SD Card by following this process:&lt;br /&gt;
&lt;br /&gt;
# Insert the SD card into a Windows PC.  This can be via a card reader or a USB adapter.&lt;br /&gt;
# Open SD Memory Card Formatter&lt;br /&gt;
# In the SD Memory Card Formatter application perform the following actions:&lt;br /&gt;
## Under &amp;quot;Select Card&amp;quot; select the card you wish to format.&lt;br /&gt;
## Under formating options select &amp;quot;Quick Format&amp;quot; (overwrite format is fine but it will take much longer).&lt;br /&gt;
## Check the box labeled &amp;quot;CHS format Size Adjustment.&amp;quot;&lt;br /&gt;
## Click the button labeled &amp;quot;Format.&amp;quot;&lt;br /&gt;
# A window will appear reminding you that you are about to delete all the data on the SD Card.  Click the button labeled &amp;quot;Yes.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A window will appear telling you that the SD card was successfully formatted.&lt;br /&gt;
=== Install OS to SD Card ===&lt;br /&gt;
==== Raspian ====&lt;br /&gt;
To install Raspian via NOOBS:&lt;br /&gt;
# Right Click on the NOOBS file you downloaded from raspberrypi.org and select &amp;quot;Extract All.&amp;quot;  A folder will be created.  The folder will be named NOOBS_vX_X_X where X corresponds with the version number.  E.g. NOOBS_V3_0_0 for NOOBS version 3.0.0&lt;br /&gt;
# Copy the contents of the NOOBS_vX_X_X folder to the root of the SD Card.  NOTE: DO NOT COPY THE NOOBS DIRECTORY, ONLY THE CONTENTS.&lt;br /&gt;
# Remove the SD Card from the Windows machine and insert it in the SD slot of the Raspberry Pi.&lt;br /&gt;
# Start the Raspberry Pi and install Raspian with the NOOBS tool.&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=Raspberry_Pi&amp;diff=187</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=Raspberry_Pi&amp;diff=187"/>
		<updated>2019-02-11T14:23:27Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: How to set up a Raspberry Pi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
This document will help you configure a Raspberry Pi 2B or 3B&lt;br /&gt;
== Windows ==&lt;br /&gt;
=== Required Software ===&lt;br /&gt;
To set up a Raspberry Pi from a Windows system you will require the following software:&lt;br /&gt;
*SD Memory Card Formatter from the SD Association (https://www.sdcard.org/downloads/formatter_4/eula_windows/SDCardFormatterv5_WinEN.zip)&lt;br /&gt;
*Win32 Disk Imager (https://sourceforge.net/projects/win32diskimager/) for installing operating systems other than Raspian via NOOBs&lt;br /&gt;
*The Operating System you wish to install on the Raspberry Pi&lt;br /&gt;
**NOOBS (https://www.raspberrypi.org/downloads/noobs/) installs Raspian, LebreELEC or some other OSs from the internet.&lt;br /&gt;
**Kali Linux or any other OS for Raspberry Pi(https://www.offensive-security.com/kali-linux-arm-images/) requires the use of Win32 Disk &lt;br /&gt;
=== Format SD Card ===&lt;br /&gt;
First you must format the SD card.  &#039;&#039;&#039;THIS WILL ERASE ALL EXISTING DATA ON THE SD CARD&#039;&#039;&#039;.  Format the SD Card by following this process:&lt;br /&gt;
&lt;br /&gt;
# Insert the SD card into a Windows PC.  This can be via a card reader or a USB adapter.&lt;br /&gt;
# Open SD Memory Card Formatter&lt;br /&gt;
# In the SD Memory Card Formatter application perform the following actions:&lt;br /&gt;
## Under &amp;quot;Select Card&amp;quot; select the card you wish to format.&lt;br /&gt;
## Under formating options select &amp;quot;Quick Format&amp;quot; (overwrite format is fine but it will take much longer).&lt;br /&gt;
## Check the box labeled &amp;quot;CHS format Size Adjustment.&amp;quot;&lt;br /&gt;
## Click the button labeled &amp;quot;Format.&amp;quot;&lt;br /&gt;
# A window will appear reminding you that you are about to delete all the data on the SD Card.  Click the button labeled &amp;quot;Yes.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A window will appear telling you that the SD card was successfully formatted.&lt;br /&gt;
=== Install OS to SD Card ===&lt;br /&gt;
==== Raspian ====&lt;br /&gt;
To install Raspian via NOOBS:&lt;br /&gt;
# Right Click on the NOOBS file you downloaded from raspberrypi.org and select &amp;quot;Extract All.&amp;quot;  A folder will be created.  The folder will be named NOOBS_vX_X_X where X corresponds with the version number.  E.g. NOOBS_V3_0_0 for NOOBS version 3.0.0&lt;br /&gt;
# Copy the contents of the NOOBS_vX_X_X folder to the root of the SD Card.  NOTE: DO NOT COPY THE NOOBS DIRECTORY, ONLY THE CONTENTS.&lt;br /&gt;
# Remove the SD Card from the Windows machine and insert it in the SD slot of the Raspberry Pi.&lt;br /&gt;
# Start the Raspberry Pi and install Raspian with the NOOBS tool.&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=186</id>
		<title>User:Jcarrigan</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=186"/>
		<updated>2019-02-11T13:58:59Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:JcarriganWiki.jpg|thumb|Joe Carrigan]]&lt;br /&gt;
&lt;br /&gt;
Joseph T. Carrigan&lt;br /&gt;
&lt;br /&gt;
Senior Security Engineer - Johns Hopkins University Information Security Institute&lt;br /&gt;
&lt;br /&gt;
Office Location: Malone 367&lt;br /&gt;
&lt;br /&gt;
Email: [mailto:joseph.carrigan@jhu.edu joseph.carrigan@jhu.edu]&lt;br /&gt;
&lt;br /&gt;
Office Phone: 410-516-6454 (office)&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=185</id>
		<title>User:Jcarrigan</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=185"/>
		<updated>2019-02-11T13:55:32Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:JcarriganWiki.jpg|thumb|Joe Carrigan]]&lt;br /&gt;
&lt;br /&gt;
Joseph T. Carrigan&lt;br /&gt;
&lt;br /&gt;
Senior Security Engineer - Johns Hopkins University Information Security Institute&lt;br /&gt;
&lt;br /&gt;
joseph.carrigan@jhu.edu&lt;br /&gt;
&lt;br /&gt;
410-516-6454 (office)&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=File:JcarriganWiki.jpg&amp;diff=184</id>
		<title>File:JcarriganWiki.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=File:JcarriganWiki.jpg&amp;diff=184"/>
		<updated>2019-02-11T13:53:34Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: Headshot of Joe Carrigan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Headshot of Joe Carrigan&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=183</id>
		<title>User:Jcarrigan</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=183"/>
		<updated>2019-02-11T13:48:15Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joseph T. Carrigan&lt;br /&gt;
&lt;br /&gt;
Senior Security Engineer - Johns Hopkins University Information Security Institute&lt;br /&gt;
&lt;br /&gt;
joseph.carrigan@jhu.edu&lt;br /&gt;
&lt;br /&gt;
410-516-6454 (office)&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
	<entry>
		<id>https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=182</id>
		<title>User:Jcarrigan</title>
		<link rel="alternate" type="text/html" href="https://wiki.isi.jhu.edu/index.php?title=User:Jcarrigan&amp;diff=182"/>
		<updated>2019-02-11T13:47:06Z</updated>

		<summary type="html">&lt;p&gt;Jcarrigan: Joseph Carrigan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joseph T. Carrigan&lt;br /&gt;
Senior Security Engineer - Johns Hopkins University Information Security Institute&lt;br /&gt;
joseph.carrigan@jhu.edu&lt;br /&gt;
410-516-6454 (office)&lt;/div&gt;</summary>
		<author><name>Jcarrigan</name></author>
	</entry>
</feed>