Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
能否将Ansible配置为尝试多个SSH密钥?_Ssh_Ansible - Fatal编程技术网

能否将Ansible配置为尝试多个SSH密钥?

能否将Ansible配置为尝试多个SSH密钥?,ssh,ansible,Ssh,Ansible,我知道,当运行带有公钥身份验证的SSH命令时,客户端将尝试它知道的所有SSH密钥,直到主机接受一个为止() 使用SSH在主机上运行Ansible命令时,似乎没有此功能:Ansible要求在Ansible.cfg中显式指定SSH私钥文件: private_key_file = /user/.ssh/id_rsa_mykey 在我的用例中,Ansible在Lando上的docker容器中运行。所有SSH密钥都从用户的SSH配置目录导入到容器中的已知路径。但是,我不一定知道Ansible需要的名称,

我知道,当运行带有公钥身份验证的SSH命令时,客户端将尝试它知道的所有SSH密钥,直到主机接受一个为止()

使用SSH在主机上运行Ansible命令时,似乎没有此功能:Ansible要求在Ansible.cfg中显式指定SSH私钥文件:

private_key_file = /user/.ssh/id_rsa_mykey
在我的用例中,Ansible在Lando上的docker容器中运行。所有SSH密钥都从用户的SSH配置目录导入到容器中的已知路径。但是,我不一定知道Ansible需要的名称,因为这是个人用户配置的

有没有办法让Ansible发出的SSH命令像SSH设计的那样尝试多个密钥

Ansible要求在Ansible.cfg中显式指定SSH私钥文件:

private_key_file = /user/.ssh/id_rsa_mykey
Ansible不要求您在
Ansible.cfg
中提供私钥文件。由于
ansible
只是调用
ssh
,因此配置连接凭据的首选位置是
~/.ssh/config
文件。在那里,您可以配置多个特定于主机的密钥:

Host host1
  IdentityFile ~/.ssh/key-for-host1

Host host2
  IdentityFile ~/.ssh/key-for-host2
或者您可以将其配置为按顺序尝试多个键:

Host *.example.com
  IdentityFile ~/.ssh/maybe-this-one
  IdentityFile ~/.ssh/okay-how-about-this-instead
当然,
ssh
将使用ssh代理中存在的任何密钥

Ansible要求在Ansible.cfg中显式指定SSH私钥文件:

private_key_file = /user/.ssh/id_rsa_mykey
Ansible不要求您在
Ansible.cfg
中提供私钥文件。由于
ansible
只是调用
ssh
,因此配置连接凭据的首选位置是
~/.ssh/config
文件。在那里,您可以配置多个特定于主机的密钥:

Host host1
  IdentityFile ~/.ssh/key-for-host1

Host host2
  IdentityFile ~/.ssh/key-for-host2
或者您可以将其配置为按顺序尝试多个键:

Host *.example.com
  IdentityFile ~/.ssh/maybe-this-one
  IdentityFile ~/.ssh/okay-how-about-this-instead

当然,
ssh
将使用ssh代理中的任何密钥。

谢谢@larsks。但是,如果我没有在
ansible.cfg
中指定私钥文件,也没有在
~/.ssh/config
中指定
identificationfile
,那么单独发出ssh命令(不带ansible)将尝试
~/.ssh/
中的所有密钥,直到找到一个有效的密钥。这就是我想用Ansible实现的目标。我无法按顺序尝试多个键,因为这些键可以命名为任何名称。这可能吗?我不相信
ssh
会有这样的行为。如果在
~/.ssh
中有任意名称的密钥,除非明确指示,否则ssh不会发现并使用它们。您的最佳选择可能是将您想要的所有密钥加载到您的ssh代理中。谢谢@larsks。但是,如果我没有在
ansible.cfg
中指定私钥文件,也没有在
~/.ssh/config
中指定
identificationfile
,那么单独发出ssh命令(不带ansible)将尝试
~/.ssh/
中的所有密钥,直到找到一个有效的密钥。这就是我想用Ansible实现的目标。我无法按顺序尝试多个键,因为这些键可以命名为任何名称。这可能吗?我不相信
ssh
会有这样的行为。如果在
~/.ssh
中有任意名称的密钥,除非明确指示,否则ssh不会发现并使用它们。您的最佳选择可能是将您想要的所有密钥加载到ssh代理中。