多个私钥的问题

多个私钥的问题

我的服务器上有多个用户,因此每个用户都有一对单独的公钥/私钥。

问题是,一旦它们被添加为身份(如果有区别的话,是 Mac OS X 10.8.4),当我连接用户帐户时,它会遍历所有密钥以尝试找到正确的密钥。由于 MaxAuthTries,这种方法效果不佳。

我可以将 MaxAuthTries 增加到 100 左右,但尽管它接受匹配的主机,但它不会覆盖原始主机,而且我真的不想为我的 ssh 服务器提供 100 次公共身份验证尝试;配置:

MaxAuthTries 2

Match host 1.2.3.4
        MaxAuthTries 100

MaxAuthTries 对我的 IP 没有任何作用;它仍然将其限制为 2。

这个解决方案并不理想,但如果可以做到的话,还是可以接受的。当使用列表中较靠后的密钥时,需要花一些时间检查所有密钥并找到正确的密钥(尤其是当我的互联网连接滞后时)...此外,发送所有密钥(无论是否加密)都会让我感到不舒服。

理想情况下,我需要使用正确的密钥文件进行连接,而不必费心尝试其他文件。问题是,我的大部分密码都保存在钥匙串中,因此如果我清除身份,我就会丢失所有保存的密码。

如果这不可能,我需要一种方法将我的 MaxAuthTries 更改为适合我的 IP 的大数字。我考虑过使用 IPTables 来实现,但我使用 Plesk,而且更喜欢能够实际使用界面来管理我的防火墙。

非常感谢!!

答案1

我正要为此开始悬赏,却发现答案很简单……

SSH 代理数据未加密,因此可以通过 shell 脚本检索,并且我使用 bash 根据给定的域(所述服务器上的 vhost)选择正确的用户名、服务器等。

我通过将公钥从我的 ssh 代理导出到文件、强制仅使用该密钥,然后删除公钥来解决这个问题。

这是我的 bash 脚本(希望它对其他人有帮助!):

#!/bin/bash
remove_public () { # remove the public key after 2 seconds
  sleep 2
  rm -f $HOME/.ssh/public_key $HOME/.ssh/config
}

get_public () { # get the public key from ssh-add
  ssh-add -L | grep "$1" > $HOME/.ssh/public_key
  if [ ! -s "$HOME/.ssh/public_key" ] #identity hasn't yet been loaded
  then
    export KEY="$1" #use the private key it'll be added to the agent for next time assuming agent is configured.
  else
    export KEY="$HOME/.ssh/public_key" #use the public key
    ( remove_public & ) >/dev/null 2>&1
  fi
  chmod 700 "$KEY"
  echo "IdentitiesOnly=yes" > "$HOME/.ssh/config"
  echo "IdentityFile $KEY" >> "$HOME/.ssh/config"
}

ssh_connect () {
  chmod -R 700 $HOME/.ssh
  if [[ -z "$1" || -z "$2" ]]
  then
    echo "Username or server not specified!"
    exit 1;
  else
    get_public "$HOME/.ssh/$2"
    ssh "$2@$1" -i "$HOME/.ssh/$2"
  fi
}

警告如果您确实有一个 ssh_config 文件,这将删除它。但删除 IdentitiesOnly 和 IdentityFile 很重要;否则,不使用此脚本的连接将无法使用 ssh。

用法:

ssh_connect "server" "username"

这是我编写的 shell 脚本的精简版,因为我的密钥并不总是在同一个目录中(事实上它们从来都不在,它们是按服务器排序的),我总是将屏幕命令传递给服务器,等等。

另请注意,如果您担心已删除公钥的安全性,则在 rm 命令中可以使用rm -fP而不是rm -f(如果您使用的是 Mac OSX)在删除之前覆盖文件 3 次。我不知道其他操作系统(如果有的话)是否支持它。

相关内容