#!/bin/bash # remote.bash: Using ssh. # This example by Michael Zick. # Used with permission. # Presumptions: # ------------ # fd-2 isn't being captured ( '2>/dev/null' ). # ssh/sshd presumes stderr ('2') will display to user. # # sshd is running on your machine. # For any 'standard' distribution, it probably is, #+ and without any funky ssh-keygen having been done. # Try ssh to your machine from the command line: # # $ ssh $HOSTNAME # Without extra set-up you'll be asked for your password. # enter password # when done, $ exit # # Did that work? If so, you're ready for more fun. # Try ssh to your machine as 'root': # # $ ssh -l root $HOSTNAME # When asked for password, enter root's, not yours. # Last login: Tue Aug 10 20:25:49 2004 from localhost.localdomain # Enter 'exit' when done. # The above gives you an interactive shell. # It is possible for sshd to be set up in a 'single command' mode, #+ but that is beyond the scope of this example. # The only thing to note is that the following will work in #+ 'single command' mode. # A basic, write stdout (local) command. ls -l # Now the same basic command on a remote machine. # Pass a different 'USERNAME' 'HOSTNAME' if desired: USER=${USERNAME:-$(whoami)} HOST=${HOSTNAME:-$(hostname)} # Now excute the above command line on the remote host, #+ with all transmissions encrypted. ssh -l ${USER} ${HOST} " ls -l " # The expected result is a listing of your username's home #+ directory on the remote machine. # To see any difference, run this script from somewhere #+ other than your home directory. # In other words, the Bash command is passed as a quoted line #+ to the remote shell, which executes it on the remote machine. # In this case, sshd does ' bash -c "ls -l" ' on your behalf. # For information on topics such as not having to enter a #+ password/passphrase for every command line, see #+ man ssh #+ man ssh-keygen #+ man sshd_config. exit 0