Author: eadler Date: Mon Oct 22 03:57:00 2012 New Revision: 241862 URL: http://svn.freebsd.org/changeset/base/241862
Log: Add a clean-room reimplementation of a script originally found in openssh's contrib directory. This version has more features and is better written. I intend to submit this upstream as well. Reviewed by: bapt Reviewed by: des Approved by: cperciva MFC after: 1 week Added: head/usr.bin/ssh-copy-id/ head/usr.bin/ssh-copy-id/Makefile (contents, props changed) head/usr.bin/ssh-copy-id/ssh-copy-id.1 (contents, props changed) head/usr.bin/ssh-copy-id/ssh-copy-id.sh (contents, props changed) Modified: head/usr.bin/Makefile Modified: head/usr.bin/Makefile ============================================================================== --- head/usr.bin/Makefile Mon Oct 22 03:45:37 2012 (r241861) +++ head/usr.bin/Makefile Mon Oct 22 03:57:00 2012 (r241862) @@ -146,6 +146,7 @@ SUBDIR= alias \ sockstat \ sort \ split \ + ssh-copy-id \ stat \ stdbuf \ su \ Added: head/usr.bin/ssh-copy-id/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/ssh-copy-id/Makefile Mon Oct 22 03:57:00 2012 (r241862) @@ -0,0 +1,24 @@ +# $FreeBSD$ + +SCRIPTS= ssh-copy-id.sh +MAN= ssh-copy-id.1 + +.include <bsd.prog.mk> +# $FreeBSD$ + +SCRIPTS= ssh-copy-id.sh +MAN= ssh-copy-id.1 + +.include <bsd.prog.mk> +# $FreeBSD$ + +SCRIPTS= ssh-copy-id.sh +MAN= ssh-copy-id.1 + +.include <bsd.prog.mk> +# $FreeBSD$ + +SCRIPTS= ssh-copy-id.sh +MAN= ssh-copy-id.1 + +.include <bsd.prog.mk> Added: head/usr.bin/ssh-copy-id/ssh-copy-id.1 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/ssh-copy-id/ssh-copy-id.1 Mon Oct 22 03:57:00 2012 (r241862) @@ -0,0 +1,80 @@ +.\"- +.\" Copyright (c) 2012 Eitan Adler +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd October 3, 2012 +.Dt SSH-COPY-ID 1 +.Os +.Sh NAME +.Nm ssh-copy-id +.Nd copy public keys to a remote host +.Sh SYNOPSIS +.Nm +.Op Fl l +.Op Fl i Ar keyfile +.Op Fl o Ar option +.Op Fl p Ar port +.Oo Ar user Ns @ Oc Ns Ar hostname +.Sh DESCRIPTION +The +.Nm +utility copies public keys to a remote host's +.Pa authorized_keys +file. +.Pp +The following options are available: +.Bl -tag -width indent +.It Fl i Ar file +Copy the key contained in +.Ar file . +This option can be specified multiple times and can be combined with +the +.Fl l +option. +.It Fl l +Copy the keys currently held by +.Xr ssh-agent 1 . +This is the default if the +.Fl i +option was not specified. +.It Fl o Ar ssh-option +Pass this option directly to +.Xr ssh 1 . +This option can be specified multiple times. +.It Fl p Ar port +Connect to the specified port on the remote host instead of the +default. +.El +.Pp +The remaining arguments are a list of remote hosts to connect to, +each one optionally qualified by a user name. +.Sh HISTORY +The +.Nm +utility was written by +.An Eitan Adler Aq ead...@freebsd.org +as a drop-in replacement for an existing utility included with +OpenSSH. Added: head/usr.bin/ssh-copy-id/ssh-copy-id.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/ssh-copy-id/ssh-copy-id.sh Mon Oct 22 03:57:00 2012 (r241862) @@ -0,0 +1,105 @@ +#!/bin/sh +#- +# Copyright (c) 2012 Eitan Adler +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer +# in this position and unchanged. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ + +usage() { + echo "usage: ssh-copy-id [-l] [-i keyfile] [-o option] [-p port] [user@]hostname" >&2 + exit 1 +} + +sendkey() { + local h="$1" + shift 1 + local k="$@" + echo "$k" | ssh $port -S none $options "$user$h" /bin/sh -c \'' + set -e; + umask 077; + keyfile=$HOME/.ssh/authorized_keys ; + mkdir -p $HOME/.ssh/ ; + while read alg key comment ; do + if ! grep -sqwF "$key" "$keyfile"; then + echo "$alg $key $comment" | + tee -a "$keyfile" >/dev/null ; + fi ; + done + '\' +} + +agentKeys() { + keys="$(ssh-add -L | grep -v 'The agent has no identities.')$nl$keys" +} + +keys="" +host="" +hasarg="" +user="" +port="" +nl=" +" +options="" + +while getopts 'i:lo:p:' arg; do + case $arg in + i) + hasarg="x" + if [ -f "$OPTARG" ]; then + keys="$(cat $OPTARG)$nl$keys" + fi + ;; + l) + hasarg="x" + agentKeys + ;; + p) + port="-p $OPTARG" + ;; + o) + options="$options -o '$OPTARG'" + ;; + *) + usage + ;; + esac +done >&2 + +shift $((OPTIND-1)) + +if [ -z "$hasarg" ]; then + agentKeys +fi +if [ -z "$keys" -o "$keys" = "$nl" ]; then + echo "no keys found" >&2 + exit 1 +fi +if [ -z "$@" ]; then + usage +fi + +for host in "$@"; do + sendkey "$host" "$keys" +done _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"