diff options
Diffstat (limited to 'contrib/ssh-copy-id')
-rw-r--r-- | contrib/ssh-copy-id | 15 |
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 |
57 | fi | 57 | fi |
58 | 58 | ||
59 | DEFAULT_PUB_ID_FILE="$HOME/$(cd "$HOME" ; ls -t .ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)" | 59 | most_recent_id="$(cd "$HOME" ; ls -t .ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)" |
60 | DEFAULT_PUB_ID_FILE="${most_recent_id:+$HOME/}$most_recent_id" | ||
60 | 61 | ||
61 | usage () { | 62 | usage () { |
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() { | |||
74 | use_id_file() { | 75 | use_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 | ;; |