Skip to content

Instantly share code, notes, and snippets.

@gsomoza
Created February 14, 2012 10:30
Show Gist options
  • Save gsomoza/1825620 to your computer and use it in GitHub Desktop.
Save gsomoza/1825620 to your computer and use it in GitHub Desktop.
Shell implementation of ssh-copy-id
#!/bin/sh
usage () {
echo "Usage: $0 [-i [identity_file]] [user@]machine"
exit 1
}
# Parse options
while getopts ":i:" o
do case "$o" in
i) # Identity file specified
if [ $(($OPTIND-1)) -eq $# ] # if there's no other argument after this one
then
# Make sure last argument is not a file or folder to catch this case where no host is provided:
# ssh-copy-id -i [identity_file]
[ ! -f "$OPTARG" ] || usage
[ ! -d "$OPTARG" ] || usage
# If last argument is not a file, read the default key and continue
key=`cat "$HOME/.ssh/id_rsa.pub"` #
else # read specified identity
[ -f "$OPTARG" ] || usage
key=`cat "$OPTARG"`
fi;;
[?]) usage;;
esac
done
[ $# -gt 0 ] || usage
shift $(($# - 1))
# Show usage if no host given
host=$1
if [ -z "$host" ]
then
usage
fi
# Default to `ssh-add -L` if no -i option given
if [ -z "$key" ]
then
key=`ssh-add -L`
fi
echo "Uploading private key..."
ssh $host 'mkdir -pm 700 ~/.ssh; echo ' $key ' >> ~/.ssh/authorized_keys ; chmod 600 ~/.ssh/authorized_keys'
echo "Done."
exit 0
@atsommer
Copy link

thanks for the helpful script! In line 43, shouldn't the text be "..public key"?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment