summaryrefslogtreecommitdiff
path: root/contrib/ssh-copy-id
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ssh-copy-id')
-rw-r--r--contrib/ssh-copy-id15
1 files changed, 11 insertions, 4 deletions
diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id
index bef5c95d9..b83b83619 100644
--- a/contrib/ssh-copy-id
+++ b/contrib/ssh-copy-id
@@ -1,6 +1,6 @@
1#!/bin/sh 1#!/bin/sh
2 2
3# Copyright (c) 1999-2013 Philip Hands <phil@hands.com> 3# Copyright (c) 1999-2016 Philip Hands <phil@hands.com>
4# 2013 Martin Kletzander <mkletzan@redhat.com> 4# 2013 Martin Kletzander <mkletzan@redhat.com>
5# 2010 Adeodato =?iso-8859-1?Q?Sim=F3?= <asp16@alu.ua.es> 5# 2010 Adeodato =?iso-8859-1?Q?Sim=F3?= <asp16@alu.ua.es>
6# 2010 Eric Moret <eric.moret@gmail.com> 6# 2010 Eric Moret <eric.moret@gmail.com>
@@ -56,7 +56,8 @@ then
56 fi 56 fi
57fi 57fi
58 58
59DEFAULT_PUB_ID_FILE="$HOME/$(cd "$HOME" ; ls -t .ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)" 59most_recent_id="$(cd "$HOME" ; ls -t .ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)"
60DEFAULT_PUB_ID_FILE="${most_recent_id:+$HOME/}$most_recent_id"
60 61
61usage () { 62usage () {
62 printf 'Usage: %s [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname\n' "$0" >&2 63 printf 'Usage: %s [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname\n' "$0" >&2
@@ -74,6 +75,11 @@ quote() {
74use_id_file() { 75use_id_file() {
75 local L_ID_FILE="$1" 76 local L_ID_FILE="$1"
76 77
78 if [ -z "$L_ID_FILE" ] ; then
79 printf "%s: ERROR: no ID file found\n" "$0"
80 exit 1
81 fi
82
77 if expr "$L_ID_FILE" : ".*\.pub$" >/dev/null ; then 83 if expr "$L_ID_FILE" : ".*\.pub$" >/dev/null ; then
78 PUB_ID_FILE="$L_ID_FILE" 84 PUB_ID_FILE="$L_ID_FILE"
79 else 85 else
@@ -287,9 +293,10 @@ case "$REMOTE_VERSION" in
287 *) 293 *)
288 # Assuming that the remote host treats ~/.ssh/authorized_keys as one might expect 294 # Assuming that the remote host treats ~/.ssh/authorized_keys as one might expect
289 populate_new_ids 0 295 populate_new_ids 0
290 # in ssh below - to defend against quirky remote shells: use 'exec sh -c' to get POSIX; 'cd' to be at $HOME; and all on one line, because tcsh. 296 # in ssh below - to defend against quirky remote shells: use 'exec sh -c' to get POSIX;
297 # 'cd' to be at $HOME; add a newline if it's missing; and all on one line, because tcsh.
291 [ "$DRY_RUN" ] || printf '%s\n' "$NEW_IDS" | \ 298 [ "$DRY_RUN" ] || printf '%s\n' "$NEW_IDS" | \
292 ssh "$@" "exec sh -c 'cd ; umask 077 ; mkdir -p .ssh && cat >> .ssh/authorized_keys || exit 1 ; if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi'" \ 299 ssh "$@" "exec sh -c 'cd ; umask 077 ; mkdir -p .ssh && { [ -z "'`tail -1c .ssh/authorized_keys 2>/dev/null`'" ] || echo >> .ssh/authorized_keys ; } && cat >> .ssh/authorized_keys || exit 1 ; if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi'" \
293 || exit 1 300 || exit 1
294 ADDED=$(printf '%s\n' "$NEW_IDS" | wc -l) 301 ADDED=$(printf '%s\n' "$NEW_IDS" | wc -l)
295 ;; 302 ;;