ssh-copy-id 和 authorized_keys 中的重复项

ssh-copy-id 和 authorized_keys 中的重复项

我只想在连接到 SSH 时输入一次密码,因此我使用 ssh-copy-id 并将我的公钥安装到授权密钥中。

但是我没有跟踪哪些服务器已经拥有我的密钥,哪些服务器没有,所以我有时会再次发出 ssh-copy-id,这会将重复的密钥添加到authorized_keys中吗?

  1. 当密钥已安装时,如何防止 ssh-copy-id 安装密钥?
  2. /* 如何在连接到 SSH 时使密钥安装自动且透明(无需显式ssh-copy-id?*/

答案1

当密钥已安装时,如何防止 ssh-copy-id 安装密钥?

编写自己的脚本。ssh-copy-id所做的就是将一行附加到文件。以下内容将检查密钥是否存在:

#!/bin/bash
cat ~/.ssh/id_* | ssh "$@" '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

为了避免重复,您可以修改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:

ssh-copy-id至于 2(使其自动),你不能,但如果你修补 ssh-copy-id 以避免重复,那么运行太多也没关系。

答案3

将要http://thinkinginsoftware.blogspot.com/2012/07/avoid-duplicates-in-authorizedkeys.html对你有用吗?基本上,诀窍是先添加键,然后删除所有出现的键,但最后一个除外(美元符号+感叹号):

/bin/bash -ex
# ssh-复制-id-uniq.sh

用户=$1
主机=$2
公钥=$3
私钥=$4

LOCAL_HOST_NAME=`主机名`

USAGE="用法:`basename $0`"

如果[$#-ne“4”]
然后
 回显 $USAGE
  出口 1

su $用户-c“ ssh-copy-id -i $公钥$用户@$主机”
ssh -i $privateKey $user@$host "sed -i \"\\\$!{/$user@$LOCAL_HOST_NAME/d;}\" ~/.ssh/authorized_keys"

相关内容