quickreference:ssh
Differences
This shows you the differences between two versions of the page.
— | quickreference:ssh [2019/08/03 19:41] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== ssh Quick Reference ====== | ||
+ | This is just some common tricks to use for ssh | ||
+ | |||
+ | ===== Passwordless Logins ===== | ||
+ | |||
+ | Sometimes, you need to be able to have an automated process log in to a //Target// machine from a //Source// machine. In most cases, this is done as the root user. This decreases security somewhat since if your //Source// machine is compromised, | ||
+ | |||
+ | The best way to do it is to use the // | ||
+ | |||
+ | First, on //Target//, create a public key pair. First, look if you already have a public key pair as we might not want to overwrite it. | ||
+ | |||
+ | <code bash> | ||
+ | ls /root/.ssh | ||
+ | </ | ||
+ | |||
+ | If that does not have id_rsa and id_rsa.pub, or if you want to trash those, then we're good. If they exist, you can either use ' | ||
+ | |||
+ | <code bash> | ||
+ | ssh-keygen -t rsa -b 4096 | ||
+ | </ | ||
+ | |||
+ | This creates a file, / | ||
+ | |||
+ | On //Target//, do the following: | ||
+ | |||
+ | <code bash> | ||
+ | mkdir -p /root/.ssh | ||
+ | joe / | ||
+ | # place contents of id_rsa.pub on a separate line, then exit the editor | ||
+ | chown -fR root:root /root/.ssh | ||
+ | chmod 700 /root/.ssh | ||
+ | chmod 600 / | ||
+ | </ | ||
+ | |||
+ | From // | ||
+ | |||
+ | ==== Limit to a single program ==== | ||
+ | |||
+ | A more secure way to do this is to limit the command available. In this case, edit // | ||
+ | |||
+ | < | ||
+ | command="/ | ||
+ | </ | ||
+ | |||
+ | Upon login, / | ||
+ | |||
+ | <code perl access_control.pl> | ||
+ | #! / | ||
+ | use warnings; | ||
+ | use strict; | ||
+ | |||
+ | # get IP address | ||
+ | my $realIP = $ENV{' | ||
+ | $realIP =~ m/ | ||
+ | $realIP = $1; | ||
+ | |||
+ | # and hostname | ||
+ | my ($hostname, | ||
+ | # if $temp exists, it is the IP | ||
+ | $realIP = $temp if $temp; | ||
+ | |||
+ | die "You must send hostname with command\n" | ||
+ | |||
+ | # do whatever you want here. | ||
+ | # look through $ENV to see what you can access | ||
+ | |||
+ | my $OK = & | ||
+ | |||
+ | die unless $OK; | ||
+ | |||
+ | 1; # we made it here, so they can issue the command | ||
+ | </ | ||
+ | |||
+ | ===== Port Forwarding ===== | ||
+ | |||
+ | ssh has the ability to forward an IP:port //as seen by the local machine// to an IP:port //as seen by the remote machine//. The most common occurrence of this would be to be able to access an internal web site when you ssh into a remote machine that is on that internal network. | ||
+ | |||
+ | The syntax uses the **-L** parameter to ssh, in the form | ||
+ | < | ||
+ | Remember, the local port is as seen by the local machine, and the remote ip/port is as seen by the remote machine. Let's use an example where we want to hit an internal web site where we have remote ssh capabilities. We can log into the remote server as | ||
+ | < | ||
+ | ssh username@joe.example.org | ||
+ | </ | ||
+ | |||
+ | The internal IP of joe.example.org is 192.168.1.5, | ||
+ | |||
+ | <code bash> | ||
+ | ssh -L localhost: | ||
+ | # or, you can leave off the first IP and localhost is assumed | ||
+ | ssh -L 8080: | ||
+ | </ | ||
+ | |||
+ | When this connection is made, any traffic going to localhost: | ||
+ | |||
+ | < | ||
+ | https:// | ||
+ | </ | ||
+ | |||
+ | and see the normally inaccessible web site on the remote network. | ||
+ | |||
+ | **Note**: You should not try to use a port that is already being used on your machine. So, for example, if you have a web server running on your local machine at port 8080, ssh can get very confused. In that case, you would want to use another port. You can use any unused port between 1025 and 65535 (don't know about the first and last ones there). | ||
+ | |||
+ | ===== Relay Port Forwarding ===== | ||
+ | |||
+ | I don't know the actual term for this, but we can forward a port to some machine, then forward that port to still another one. In this case, we have jane.example1.org, | ||
+ | |||
+ | <code bash> | ||
+ | ssh -L localhost: | ||
+ | # we make the connection to jane and get a command prompt | ||
+ | ssh -L localhost: | ||
+ | # we are now on john, and 3389 from jane is forwarded to windows | ||
+ | # server at 192.168.1.10 | ||
+ | </ | ||
+ | In this case, we have said //any traffic for port 3389 on my local machine is forwarded to localhost port 3389 on jane// in the first command. | ||
+ | |||
+ | The second ssh command says //any traffic for port 3389 on my local machine (jane) is forwarded to port 3389 on the machine on my same subnet at 192.168.1.10 on port 3389// | ||
+ | |||
+ | You can now open an rdp client on your local machine to connect to localhost: |
quickreference/ssh.txt · Last modified: 2019/08/03 19:41 by 127.0.0.1