it-swarm-ja.com

ssh-copy-idとauthorized_keysの重複

SSHに接続するときにパスワードを1回だけ入力したいので、ssh-copy-idを使用して、許可されたキーにpubkeyをインストールします。

しかし、どのサーバーがすでに自分のキーを持っているか、持っていないかを追跡していないので、ssh-copy-idを再度発行して、authorized_keysに重複するキーを追加することがありますか?

  1. すでにインストールされているときにssh-copy-idがキーをインストールしないようにするにはどうすればよいですか?
  2. / * SSHに接続するときにキーのインストールを自動で透過的にする方法(明示的なssh-copy-idなし?* /
3
Vi.

すでにインストールされているときにssh-copy-idがキーをインストールしないようにするにはどうすればよいですか?

独自のスクリプトを作成します。すべて ssh-copy-idは、ファイルに行を追加します。以下は、キーの存在を確認します。

#!/bin/bash
cat ~/.ssh/id_* | ssh "[email protected]" 'mkdir -pm 0700 ~/.ssh &&
    while read -r ktype key comment; do
        if ! (grep -Fw "$ktype $key" ~/.ssh/authorized_keys | grep -qsvF "^#"); then
            echo "$ktype $key $comment" >> ~/.ssh/authorized_keys
        fi
    done'

SSHに接続するときにキーのインストールを自動で透過的にする方法(明示的なssh-copy-idなしで?

サーバーが公開鍵をまだ持っていない場合は、どこから取得するかもわからないため、できません。

2
user1686

重複を避けるために、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を実行しすぎても問題ありません。

1
mivk