diff --git a/plugins/ssh-copy-id/ssh-copy-id.plugin.zsh b/plugins/ssh-copy-id/ssh-copy-id.plugin.zsh new file mode 100644 index 000000000..57a0e8527 --- /dev/null +++ b/plugins/ssh-copy-id/ssh-copy-id.plugin.zsh @@ -0,0 +1,53 @@ +# There's probably a better way to define this if +ssh-upload-id () { + RSAKEY="${HOME}/.ssh/id_rsa.pub" + DSAKEY="${HOME}/.ssh/id_dsa.pub" + + if [ $# -eq 2 ]; then + KEY=$1 + if [ ! -r $KEY ] + then + echo "'$KEY' does not exist or is not readable" + return 1 + fi + SERVER=$2 + else + if [ -r ${RSAKEY} ]; then + KEY=$RSAKEY + elif [ -r ${DSAKEY} ]; then + KEY=$RSAKEY + else + echo "No RSA or DSA key found" + return 1 + fi + SERVER=$1 + fi + + if [ $# -lt 1 -o "$1" = "-h" ]; then + echo "Usage: $0 [publickey_file] [user@]machine" + return 1 + fi + + # testing above + + echo "Copying $KEY to $SERVER" + + cat $KEY | \ + ssh $SERVER 'mkdir -p -m 0700 ${HOME}/.ssh && \ + cat >> $HOME/.ssh/authorized_keys && \ + chmod 0600 $HOME/.ssh/authorized_keys' + + if [ $? -eq 0 ]; then + echo "Public key installed on $SERVER" + return 0 + else + echo "Sorry, an error occurred!" + return 1 + fi +} + +# alias it to ssh-copy-id if it doesn't exist, like on OS X +EXISTING_CHECK=`which ssh-copy-id` +if [ $? -ne 0 ]; then + alias ssh-copy-id=ssh-upload-id +fi