質問: ssh-copy-idとauthorized_keysの重複 sshに接続するときにパスワードを1回だけ入力したいので、ssh-copy-idを使用して、許可されたキーにpubkeyをインストールします。しかし、どのサーバーがすでに自分のキーを持っているか、持っていないかを追跡していないので、ssh-copy-idを再度発行して、authorized_keysに重複するキーを追加することがありますか? すでにインストールされているときにssh-copy-idがキーをインストールしないようにするにはどうすればよいですか? / * sshに接続するときにキーのインストールを自動で透過的にする方法(明示的なssh-copy-idなし?* /
回答: 重複を避けるために、ssh-copy-idを変更できます。これは、debianのopenssh-clientで配布されているssh-copy-idに対して行いました。これは、私にとってはバージョン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を実行しすぎても問題ありません。