当我尝试在 `ddev auth ssh` 之后在 DDEV 网络容器中使用 ssh 时,ssh 密钥似乎不起作用,"too many authentication failures"
When I try to use ssh in DDEV web container after `ddev auth ssh`, the ssh keys don't seem to work, "too many authentication failures"
我已经使用 ddev auth ssh
将我的 ssh 身份添加到我的 DDEV-Local 项目中。
但是当我使用 ssh 连接到外部主机时,ssh example.com
我得到 "Too many authentication failures"
Received disconnect from 174.127.116.22 port 22:2: Too many authentication failures
Disconnected from 174.127.116.22 port 22
当我使用 ssh -v example.com
时,我看到它在放弃 "Too many authentication failures" 之前尝试了六个不同的键:
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:LrokWMbl1bD0vV0z7Qpn4HLd168NYSIAbqsek6aXIaE agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:ecpRhfcaRWS8EfmYyLuJ81ayhyPWAZd9MG3mKOUKMqA agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:07LrVlDSWu4r+4Eb6WP8FpWYYcREw7IcGm4rtp5v+Ws agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:6L9cIsLlu858CPgb5zZ3v3+5p808uNencyAxJ0S9wOM agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:HwksLkZqEXAK6Zo21+y/C508Mjx2I7EvUQWFScKHsAQ agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:dsGaELF0OPNyQfIYZoEyI+dP3AQqh5r+15iUwfalNtc agent
Received disconnect from 174.127.116.75 port 22:2: Too many authentication failures
Disconnected from 174.127.116.75 port 22
我该如何解决这个问题?请注意,我的 ~/.ssh 目录中有 10 个不同的私钥。
似乎 ssh 并不是为使用大量私钥而设计的,但有些人最终还是得到了很多私钥。 (请注意,您可以将一个私钥用于很多很多目的;您与世界或外部服务共享的只是 public 密钥,它不会泄露关于私钥的任何信息。)
由于 ddev auth ssh
正在为您设置一个 ssh 代理,而且似乎没有办法让 ssh 从该代理提供的身份中选择一个特定的身份,您需要使用两种解决方法之一。
解决方法 #1:只使用几个键
当然,您可以将 ~/.ssh 目录中的密钥数量减少到 6 个或更少(6 是 MaxAuthTries
服务器端 sshd 中的默认值)。但假设您不想那样做。
创建一个目录,也许~/ddev-ssh-keys
。在该目录中,复制或符号链接您最常使用的 6 个键。所以 cd ~/ddev-ssh-keys && for item in goodkey1 goodkey2 ... googdkey6; do ln -s ~/.ssh/$item; done
(或您想要完成链接或复制的任何方式)。
现在 ddev auth ssh -d ~/ddev-ssh-keys
和 ddev-ssh-agent 将只有这 6 个密钥。如果它们是解决大部分问题的正确方法,那么您应该很擅长这种方法。
解决方法 #2:使用 .ddev/homeadditions
将密钥复制到容器中
此变通方法可让您实际将所需的密钥复制到 Web 容器中。这可能不如第一种方法安全(因为你永远不应该真正在任何地方复制你的私钥),但它有效。
如果您真的想要容器中的密钥(而不是使用代理),那么 mkdir -p .ddev/homeadditions/.ssh && cp ~/.ssh/<yourimportantkey(s)> .ddev/homeadditions/.ssh && chmod 700 .ddev/homeadditions/.ssh && chmod 600 .ddev/homeadditions/.ssh/*
。然后,您可以按任何方式使用 .ddev/homeadditions/.ssh/config 文件,包括指定密钥。
这是 rfay 解决方法 #2 的扩展,以使其更安全。您可以使用密钥对的 public 部分来指定要从 ssh 代理使用哪个私钥。因此,不要将您的私钥复制到 .ddev/homeadditions/.ssh
文件夹中,只需复制公钥即可。例如,mkdir -p .ddev/homeadditions/.ssh && cp ~/.ssh/*.pub .ddev/homeadditions/.ssh && chmod 700 .ddev/homeadditions/.ssh && chmod 600 .ddev/homeadditions/.ssh/*
.
从技术上讲,您甚至不需要 'chmod 600' 密钥文件,因为它们是公钥,但它确实增加了一些安全性。
然后您可以在命令行上指定要使用的密钥:
ssh -i ~/.ssh/id_rsa.pub example@example.com
ssh -o IdentityFile=~/.ssh/id_rsa.pub example@example.com
或者您可以在 .ssh/config
文件中指定 IdentityFile。
我已经使用 ddev auth ssh
将我的 ssh 身份添加到我的 DDEV-Local 项目中。
但是当我使用 ssh 连接到外部主机时,ssh example.com
我得到 "Too many authentication failures"
Received disconnect from 174.127.116.22 port 22:2: Too many authentication failures
Disconnected from 174.127.116.22 port 22
当我使用 ssh -v example.com
时,我看到它在放弃 "Too many authentication failures" 之前尝试了六个不同的键:
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:LrokWMbl1bD0vV0z7Qpn4HLd168NYSIAbqsek6aXIaE agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:ecpRhfcaRWS8EfmYyLuJ81ayhyPWAZd9MG3mKOUKMqA agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:07LrVlDSWu4r+4Eb6WP8FpWYYcREw7IcGm4rtp5v+Ws agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:6L9cIsLlu858CPgb5zZ3v3+5p808uNencyAxJ0S9wOM agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:HwksLkZqEXAK6Zo21+y/C508Mjx2I7EvUQWFScKHsAQ agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: rfay@rfay-mbp-2017.local RSA SHA256:dsGaELF0OPNyQfIYZoEyI+dP3AQqh5r+15iUwfalNtc agent
Received disconnect from 174.127.116.75 port 22:2: Too many authentication failures
Disconnected from 174.127.116.75 port 22
我该如何解决这个问题?请注意,我的 ~/.ssh 目录中有 10 个不同的私钥。
似乎 ssh 并不是为使用大量私钥而设计的,但有些人最终还是得到了很多私钥。 (请注意,您可以将一个私钥用于很多很多目的;您与世界或外部服务共享的只是 public 密钥,它不会泄露关于私钥的任何信息。)
由于 ddev auth ssh
正在为您设置一个 ssh 代理,而且似乎没有办法让 ssh 从该代理提供的身份中选择一个特定的身份,您需要使用两种解决方法之一。
解决方法 #1:只使用几个键
当然,您可以将 ~/.ssh 目录中的密钥数量减少到 6 个或更少(6 是 MaxAuthTries
服务器端 sshd 中的默认值)。但假设您不想那样做。
创建一个目录,也许~/ddev-ssh-keys
。在该目录中,复制或符号链接您最常使用的 6 个键。所以 cd ~/ddev-ssh-keys && for item in goodkey1 goodkey2 ... googdkey6; do ln -s ~/.ssh/$item; done
(或您想要完成链接或复制的任何方式)。
现在 ddev auth ssh -d ~/ddev-ssh-keys
和 ddev-ssh-agent 将只有这 6 个密钥。如果它们是解决大部分问题的正确方法,那么您应该很擅长这种方法。
解决方法 #2:使用 .ddev/homeadditions
将密钥复制到容器中此变通方法可让您实际将所需的密钥复制到 Web 容器中。这可能不如第一种方法安全(因为你永远不应该真正在任何地方复制你的私钥),但它有效。
如果您真的想要容器中的密钥(而不是使用代理),那么 mkdir -p .ddev/homeadditions/.ssh && cp ~/.ssh/<yourimportantkey(s)> .ddev/homeadditions/.ssh && chmod 700 .ddev/homeadditions/.ssh && chmod 600 .ddev/homeadditions/.ssh/*
。然后,您可以按任何方式使用 .ddev/homeadditions/.ssh/config 文件,包括指定密钥。
这是 rfay 解决方法 #2 的扩展,以使其更安全。您可以使用密钥对的 public 部分来指定要从 ssh 代理使用哪个私钥。因此,不要将您的私钥复制到 .ddev/homeadditions/.ssh
文件夹中,只需复制公钥即可。例如,mkdir -p .ddev/homeadditions/.ssh && cp ~/.ssh/*.pub .ddev/homeadditions/.ssh && chmod 700 .ddev/homeadditions/.ssh && chmod 600 .ddev/homeadditions/.ssh/*
.
从技术上讲,您甚至不需要 'chmod 600' 密钥文件,因为它们是公钥,但它确实增加了一些安全性。
然后您可以在命令行上指定要使用的密钥:
ssh -i ~/.ssh/id_rsa.pub example@example.com
ssh -o IdentityFile=~/.ssh/id_rsa.pub example@example.com
或者您可以在 .ssh/config
文件中指定 IdentityFile。