ssh -vv -D 1618 -C -N someserver
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/ubuntu/.ssh/id_rsa RSA SHA256:xxx agent
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug1: Offering public key: [email protected] RSA SHA256:180K+xxx agent
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug1: Offering public key: [email protected] ED25519 SHA256:xxxy agent
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug1: Offering public key: x-production-eb-key-pair RSA SHA256:xxxy+1ZNflh/xxxy agent
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug1: Offering public key: [email protected] RSA SHA256:/yG/xxxz+2eWo agent
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug1: Offering public key: [email protected] ED25519 SHA256:xxxv agent
debug2: we sent a publickey packet, wait for reply
Received disconnect from 10.240.0.1 port 22:2: Too many authentication failures
我已经删除了上面的一些键,~/.ssh/*
但仍然有人尝试,这怎么可能?
答案1
您仍然可以使用密钥,因为有 SSH 代理正在运行。显然已经添加了几个私钥身份。添加的身份保存在内存中。从常规文件(即从磁盘上的私钥)添加的身份不需要该文件稍后可用;您甚至可以从另一个系统“借用”密钥(例子)。从文件系统中删除某些密钥的行为不会影响您的 SSH 代理,它已经加载了身份。
agent
一行末尾的单词如下所示:
debug1: Offering public key: /home/ubuntu/.ssh/id_rsa RSA SHA256:xxx agent
表示此尝试对您进行身份验证涉及代理,而不是文件。…/.ssh/id_rsa
这里仅表示添加身份时使用的文件;该文件可能仍然存在,也可能不再存在,这无关紧要。
像这样的程序ssh
可以通过套接字与代理进行通信。他们可以通过检查名为 的环境变量来了解套接字的路径SSH_AUTH_SOCK
。您ssh
从 shell 继承了环境。如果您echo "$SSH_AUTH_SOCK"
在 shell 中运行,那么您将看到套接字的路径。
运行ssh-add -l
或ssh-add -L
以查看代理当前代表的身份。
您可以使用 从代理中删除身份ssh-add -d /path/to/key
,但这需要指定要删除的身份的(私钥或公钥)密钥文件的路径。如果您不再有任何指定要删除的身份的文件,请考虑删除带有 的所有身份ssh-add -D
,然后重新添加您不想删除的所有身份。您可以通过运行(重新)添加密钥ssh-agent /path/to/key
。
看man 1 ssh-add
了解详情。
ssh
使用空或未设置运行SSH_AUTH_SOCK
将使其无法与代理通信:
# empty
SSH_AUTH_SOCK= ssh …
# unset
env -u SSH_AUTH_SOCK ssh …
当您想要按需忽略代理而不更改代理的状态并且不失去将来使用代理的能力时,这非常有用。