How do you run a program on a remote server using ssh?
For this example we'll have two servers, one named Johnny and another named Cash. Both are running openssh. Our goal is to have a program on Johnny login to Cash and run a program on Cash. To make task a little more complex we'll be using different users on each machine.
The first thing we'll need to do is generate public and private keys on Johnny. So, logged into Johnny as user 'boy' we create public and private keys by creating them in .ssh directory as follows:
Johnny$> pwd /home/boy/.ssh Johnny$> ssh-keygen -t rsa -f sue Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in sue. Your public key has been saved in sue.pub. The key fingerprint is: 8d:e9:c0:g1:c7:1f:e3:b3:2f:38:12:aa:b5:3b:2e:b3 boy@Johnny Johnny$>
In example above we picked an arbitrary name, sue, to identify files that hold generated keys. When prompted to enter a passphrase (twice) we simply hit enter twice.
As output of ssh-keygen indicates, public key has been saved in a file named sue.pub.
The output of ssh-keygen implies, but doesn't indicate directly, that private key is in a file named sue (Yes, a user named boy created a file named sue.)
Johnny$>ls -l -rwx------ 1 sue suegrp 887 Oct 17 14:27 sue -rwx------ 1 sue suegrp 223 Oct 17 14:27 sue.pub
The private key file, sue, will remain on Johnny for reaminder of this exercise, but public key must be moved to remote server, Cash. Note that .ssh directory itself, as well as sue and sue.pub files should have permissions of 700.
Now you'll need to ftp sue.pub file from Johnny to Cash. The user on Cash that we'll login as is user 'named'.
Johnny$> ftp Cash Connected to Cash 220 Cash - Propery of Xyz. - Authorized users only Name (Cash:boy): named 331 Password required for named. Password: 230-Last unsuccessful login: Fri Oct 17 13:12:55 2003 on ftp from Johnny 230-Last login: Fri Oct 17 16:02:11 2003 on /dev/pts/1 from Johnny 230 User named logged in. ftp> cd .ssh ftp> mput sue.pub mput sue.pub? y 200 PORT command successful. 150 Opening data connection for sue.pub. 226 Transfer complete. 224 bytes sent in 0.000781 seconds (280.1 Kbytes/s) local: sue.pub remote: sue.pub ftp>bye 221 Goodbye. Johnny$>