Чтобы избежать дубликатов, вы можете изменить ssh-copy-id
.
Я сделал это с ssh-copy-id, распространяемым с openssh-клиентом Debian, который для меня был версией 1: 6.0p1-4. Короче я модифицировал
cat >> ~/.ssh/authorized_keys
в
t=$(tempfile); cat ~/.ssh/authorized_keys - | sort -u > $t && mv $t ~/.ssh/authorized_keys
Вот патч ( diff -c /usr/bin/ssh-copy-id.orig /usr/bin/ssh-copy-id
)
*** /usr/bin/ssh-copy-id.orig 2013-02-08 23:18:09.000000000 +0100 --- /usr/bin/ssh-copy-id 2013-12-12 23:14:48.705964476 +0100 *************** *** 41,47 **** # strip any trailing colon host=`echo $1 | sed 's/:$//'` ! { eval "$GET_ID" ; } | ssh $host "umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon ~/.ssh ~/.ssh/authorized_keys >/dev/null 2>&1 || true)" || exit 1 cat <<EOF Now try logging into the machine, with "ssh '$host'", and check in: --- 41,47 ---- # strip any trailing colon host=`echo $1 | sed 's/:$//'` ! { eval "$GET_ID" ; } | ssh $host 'sh -c "umask 077; mkdir -p ~/.ssh ; t=$(tempfile); cat ~/.ssh/authorized_keys - | sort -u > \$t && mv \$t ~/.ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon ~/.ssh ~/.ssh/authorized_keys >/dev/null 2>&1 || true)"' || exit 1 cat <<EOF Now try logging into the machine, with "ssh '$host'", and check in:
Что касается 2 (сделать это автоматически), вы не можете, но если вы исправите ssh-copy-id, чтобы избежать дублирования, не имеет значения, выполняете ли вы ssh-copy-id
слишком много.