This howto covers generating and using ssh keys for automated:
a) Login
b) Make backups
c) Run commands from shell etc
Task: Generating ssh keys
1) Log on to your workstation ( for example log on to workstation called admin.fbsd.nixcraft.org as vivek user). Please refer the following sample setup - You will be log in, on your local system, AS THE USER you wish to make passwordless ssh connections.
2) Create the Cryptographic Key on FreeBSD workstation, enter:
$ ssh-keygen -t rsa
Assign the pass phrase (press [enter] key twice if you don't want a passphrase). It will create 2 files in ~/.ssh directory as follows:
- ~/.ssh/id_rsa : identification (private) key
- ~/.ssh/id_rsa.pub : public key
3) Use scp to copy the id_rsa.pub (public key) to rh9linux.nixcraft.org server as authorized_keys2 file, this is know as Installing the public key to server.
$ scp .ssh/id_rsa.pub vivek@rh9linux.nixcraft.org:.ssh/authorized_keys2
4) From FreeBSD workstation login to server:
$ ssh rh9linux.nixcraft.org
5) Changing the pass-phrase on workstation (if needed):
$ ssh-keygen -p
6) Use of ssh-agent to avoid continues pass-phrase typing
At freebsd workstation type:
$ ssh-agent $BASH $ ssh-add
Type your pass-phrase
From here, whenever connecting to server it won’t ask for password.
Above two commands can be added to ~/.bash_profile so that as soon as I login into workstation I can set the agent.
7) Deleting the keys hold by ssh-agent
a) To delete all keys
$ ssh-add -D
b) To delete specific key
$ ssh-add -d key
c) To list keys
$ ssh-add -l
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- 10 Greatest Open Source Software Of 2009
- My 10 UNIX Command Line Mistakes
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
- Email this to a friend
- Download PDF version
- Printable version
- Comment RSS feed
- Last Updated: Oct/24/2007



{ 24 comments… read them below or add one }
Hi Vivek Sir,
This is Ashish here. Yes… I caught you..
It very nice to see you once again. Where are you right now?? In india?? Wanted to meet you..
Now we are expecting some good technical documents from you as usual. Just now finished LLST written by you.
If possible please mail me at ashish_r_pathak@yahoo.com
Thanks and Regards,
/Ashish Pathak.
Pune, India.
Hi Vivek,
I am kevin here from mumbai. Thanks for this article on SSH. Also i liked your Shell programming tutorial. If possible can you give me some examples on Local and remote port forwarding techniques on SSH.
Best regards,
Kevin
Hi Vivek
this is Amit Shiknis here from Pune. Where are you now?How are you? i just gone through SSH docs its really very nice article.
Hope you will be fine. if possible mail me on amitshiknis@vsnl.net
regards
Amit
Kevin,
See url
for Local and remote port forwarding techniques on SSH:
Hello,
I installed openSSH client on windows.
Create a public key using the command
ssh-keygen -t rsa
Copied the key to the unix box using the command
scp .ssh/id_rsa.pub user@hostname:.ssh/authorized_keys
changed the permissions on authorized_keys
chmod 600
The USERNAME on the windows and unix box are the same.
When I try to run the remote script using ssh
ssh user@hostname scriptname
It Prompts me for the PASSWORD. I am not sure what am I doing wrong here. Any help on this is much appreciated.
Thanks
GV
I am including the client side trace when I used ssh below.
C:\Documents and Settings\gvarada\.ssh>ssh -v stlap08d whoami
OpenSSH_3.8.1p1, OpenSSL 0.9.7d 17 Mar 2004
debug1: Reading configuration data /etc/ssh_config
debug1: Connecting to stlap08d [172.19.1.24] port 22.
debug1: Connection established.
debug1: identity file /home/gvarada/.ssh/identity type -1
debug1: identity file /home/gvarada/.ssh/id_rsa type 1
debug1: identity file /home/gvarada/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.1
debug1: match: OpenSSH_4.1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.8.1p1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024
Your method of not giving a pass phrase is convenient but not really secure (IMHO). Much better to create a key with a pass phrase, and use
ssh-addto enter the pass phrase ONCE PER SESSION. That is, before you ssh to the remote machine, runssh-addwhich will prompt you for the passphrase. For the rest of the session, ssh-add will authenticate for future ssh connections, which are in effect ‘password-less’to the moderator: I withdraw my previous comment, the post does include ssh-add, but I had not read it thoroughly
Nice tip. Thanks.
Now I did the same for an OpenSSH server which listen on port 22000. Actually, there’s a firewall listening no that port, which redirects the incoming traffic to a LAN’s OpenSSH server.
I’ve copied the key to the /home/user/.ssh/authorizedkeys but the client doesn’t connect without prompting for the password…
Hi, I am new to SSH. Can you tell me how can I automate connecting to remote unix boxes using SSH through a shell script and the SSH connections should take the password at runtime possibly using a config file
something like
cat server_repo.txt:
abc_server abc/def
where abc_server – unix box
abc – username
def – password
Note – I dont want to use “Passwordless Connectivity”
Thanks,
Arul.
Hi,
Why is it mandatory to have the same username on both source and target servers?
Is there any workaround to this limitation?
Thnx.
No it is not required. You can use user name tom on client and username jerry on server.
hi vivek,
i think this method will not work for different users
ie what i want to say is user1 can not login to user2 account with out password in to server can u conform it and revert back again?
thanks in advance
surendra
Hi Vivek,
In your step 3 as below. It will prompt for the password of user vivek on rh9linux.nixcraft.org to complete the copying of the public key.
$ scp .ssh/id_rsa.pub vivek@rh9linux.nixcraft.org:.ssh/authorized_keys2
Is there any method by which I can pass this value non-interactively.
Thanks
Shankar
Regarding using scp to copy is_rsa.pub into authorized_keys2, I don’t believe this to be a good idea if there is any chance that you need more than one user or public key to have access to the server.
In this case, rather do the following:
ssh vivek@rh9linux.nixcraft.org “cat >> .ssh/authorized_keys2″ < .ssh/id_rsa.pub
This will pipe the public key through the ssh session and append it to the existing file if it exists. Otherwise it will create the file with the contents of your id_rsa.pub
Lol. Came back here to figure out how I did that thing ^^ before. :D
… and realised I hadn’t explained properly:
the authorized_keys2 file can contain multiple keys. By using scp, you might overwrite any previously-placed keys with a single key. By appending (using the >>) you specifically add your key to the end of the authorized_keys2 file and you won’t lose any previous keys.
hi
i hav did as u mentioned abow but it wont work it is asking for the passwd
Hi,
Please run # passwd -d login_name for each user and
then check.
regards
hari
HI Vivek,
Your article on SSH is very nice. It very helpfull for us.
Keep doing the great work
Regards,
Rajesh
sir,
your article is very educational. i also referred your tutorial on shell scripting. The way you write in simple language makes a difficult concept also understandable. I think this is a trait of all Indian writers.
thank you for the good work
sincerely,
sreekar
@Sreekar,
Thanks for feedback!
I’m glad to know this site helped you to understand Linux and shell scripting.
Am not able to login into another computer even after installing ssh on both computers.
It tells me the permission denied ,please try again and when i try again it doesnt log in.
And yet other people are able to use ssh comfortably. My computer is also uptodate
Hi Wanga
Likely you have not got the ssh daemon running on the computer you want to connect to, though there could be many other reasons it is not working. Could you paste any error messages you might be getting when you try to connect?
I can’t log into my server,it shows network error:connection time out.kindly help.
Hi crazyswap
Try running a tcptraceroute (http://en.wikipedia.org/wiki/Tcptraceroute) to your server to confirm that the problem is not the network:
tcptraceroute server.name.or.ip 22
You may need to install tcptraceroute.
If tcptraceroute fails only on the last step then it is likely that the ssh service is not running on the server. If your server is under paid hosting, contact your hosting provider to find out what the cause is.