Add ssh key to remote host
If you are working on recent versions of the *nix OS like Fedora or Ubuntu then you would know about the commad ssh-copy-id. But if you land up using one of the older versions like Solaris or something where the command is not present, then probably you need a simpler solution to this. One of the simplest solution is with a lot of assumtions, simply copy the id_rsa file to remote server and hope it works. And here is a script to do just that:
#!/bin/bash - #=============================================================================== # # FILE: add_ssh_key.sh # # USAGE: ./add_ssh_key.sh # # DESCRIPTION: Add the ssh key # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: Amit Agarwal (aka), amit.agarwal@roamware.com # COMPANY: Roamware India Pvt Ltd # CREATED: 09/19/2011 11:02:08 AM IST # Last modified: Mon Sep 19, 2011 11:02AM # REVISION: --- #=============================================================================== ip=$2 un=$1 IFS=$"\n' key=$(cat .ssh/id_rsa.pub) ssh $un@$ip "echo $key >> ~/.ssh/authorized_keys"
or the other option is to copy the ssh-copy-id script to the server in question. If you don’t have the script handy, I am pasting it here:
#!/bin/sh # Shell script to install your public key on a remote machine # Takes the remote machine name as an argument. # Obviously, the remote machine must accept password authentication, # or one of the other keys in your ssh-agent, for this to work. ID_FILE="${HOME}/.ssh/id_rsa.pub" if [ "-i" = "$1" ]; then shift # check if we have 2 parameters left, if so the first is the new ID file if [ -n "$2" ]; then if expr "$1" : ".*\.pub" > /dev/null ; then ID_FILE="$1" else ID_FILE="$1.pub" fi shift # and this should leave $1 as the target name fi else if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then GET_ID="$GET_ID ssh-add -L" fi fi if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then GET_ID="cat ${ID_FILE}" fi if [ -z "`eval $GET_ID`" ]; then echo "$0: ERROR: No identities found" >&2 exit 1 fi if [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then echo "Usage: $0 [-i [identity_file]] [user@]machine" >&2 exit 1 fi # strip any trailing colon host=`echo $1 | sed 's/:$//'` { eval "$GET_ID" ; } | ssh $host "umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys" || exit 1 cat <<EOF Now try logging into the machine, with "ssh '$host'", and check in: ~/.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. EOF
Related articles
- David Tomaschik: Using an SSH Connection to Provide Remote Support (Part I) (systemoverlord.com)
- How to Configure SSH on Dell Power-Connect (ciscoskills.net)
- 9 Awesome SSH Tricks (tychoish.com)
Related Articles:
- 2011/09/07 ss – utility to investigate sockets.
- 2010/11/15 OpenLDAP and SSL – some links
- 2010/09/04 Remove some path from the PATH variable temporarily.
- 2011/10/30 Quickly install most of the things that you need on Fedora.
- 2011/10/21 Fedora 16 screenshot with conky and bmpaenl2
Authored By Amit Agarwal
Amit Agarwal, Linux and Photography are my hobbies.Creative Commons Attribution 4.0 International License.