像大多数系统管理员一样,我一直都使用openssh。我大约有十二个ssh密钥,我希望每个主机都有一个不同的ssh密钥。但是,这在我第一次连接到主机时会出现问题,我所拥有的只是一个密码。我只想使用密码连接主机,在这种情况下不使用ssh键。但是ssh客户端将提供my中的所有公钥~/.ssh/
(我通过查看的输出知道这一点ssh -v
)。既然我有那么多,我将因身份验证失败而断开连接。
有什么方法可以告诉我的ssh客户端不提供所有的ssh密钥吗?
像大多数系统管理员一样,我一直都使用openssh。我大约有十二个ssh密钥,我希望每个主机都有一个不同的ssh密钥。但是,这在我第一次连接到主机时会出现问题,我所拥有的只是一个密码。我只想使用密码连接主机,在这种情况下不使用ssh键。但是ssh客户端将提供my中的所有公钥~/.ssh/
(我通过查看的输出知道这一点ssh -v
)。既然我有那么多,我将因身份验证失败而断开连接。
有什么方法可以告诉我的ssh客户端不提供所有的ssh密钥吗?
Answers:
根据以下手册页,这是预期的行为ssh_config
:
IdentityFile
Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
tion identity is read. The default is ~/.ssh/identity for protocol
version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
protocol version 2. Additionally, any identities represented by the
authentication agent will be used for authentication.
[...]
It is possible to have multiple identity files specified in configu‐
ration files; all these identities will be tried in sequence. Mul‐
tiple IdentityFile directives will add to the list of identities
tried (this behaviour differs from that of other configuration
directives).
基本上,指定IdentityFile
s只是将密钥添加到已经提供给客户端的SSH代理的当前列表中。
请尝试在.ssh/config
文件底部使用此方法来覆盖此行为:
Host *
IdentitiesOnly yes
您还可以在主机级别覆盖此设置,例如:
Host foo
User bar
IdentityFile /path/to/key
IdentitiesOnly yes
ssh -o "IdentitiesOnly true" -v -A user@host
我用来登录没有密钥但我想提供代理转发功能的机器。(-v
用于详细调试)。
yes
(不是true
)?
IdentitiesOnly
不一定总是有帮助,您可能必须专门排除主机;看到superuser.com/questions/859661/...
尽管其他人已经通过基于配置的解决方案暗示了这一点,但可能值得指出的是,您可以使用以下命令在命令行上轻松地仅此一项:
ssh -o 'PubkeyAuthentication no' myhostname.mydomain
按照James Sneeringer的解决方案,您可能只想按照以下方式设置ssh_config:
Host *.mycompany.com
IdentityFile .ssh/id_dsa_mycompany_main
Host *.mycustomer.com
IdentityFile .ssh/id_dsa_mycustomer
Host *
RSAAuthentication no #this should be up top, avoid ssh1 at all costs
PubkeyAuthentication no
如果使用特定的密钥连接到不在公共域中的许多计算机,请考虑在您自己的DNS中为它们提供所有CNAME。我对所有客户系统都这样做。
如果使用ssh -i / path / to / key指向特定的密钥文件,即使其他文件已加载到代理中,它也只会使用该文件,并且不会提示您输入密码。您还可以编辑〜/ .ssh / config并投放类似这样的内容...
主机foo.example.com
IdentityFile .ssh / id_rsa_foo.example.com
你也可以做...
主机* .example.org
IdentityFile .ssh / id_rsa_example.org
IdentitiesOnly
只有这样。