Chef通过SFTP免密获取远程文件报错:未在URI中提供密码
我之前在使用Chef的remote_file资源通过SFTP拉取文件时也遇到过这个问题。虽然你的Chef Client已经配置了SSH密钥免密登录,但默认的SFTP处理程序并不会自动识别并使用这些密钥,必须显式配置才行。下面是具体的解决方法:
方法一:直接指定SSH私钥路径
修改你的remote_file资源,添加ssh_options属性,指向Chef Client用于认证远程SFTP主机的私钥文件路径。示例代码如下:
remote_file '/tmp/test.txt' do source 'sftp://root@xyz.imzcloud.local:22/tmp/test.txt' # 指定Chef Client用户可访问的私钥文件路径 ssh_options keys: ['/home/chef/.ssh/id_rsa'] end
如果你的私钥存放在默认位置(比如运行Chef Client的用户的~/.ssh/id_rsa),可以用File.expand_path动态获取该路径:
ssh_options keys: [File.expand_path('~/.ssh/id_rsa')]
方法二:使用SSH代理
如果Chef Client的SSH代理已经加载了对应的密钥(在通过代理管理密钥的环境中很常见),可以让SFTP处理程序直接使用代理,无需手动指定密钥文件:
remote_file '/tmp/test.txt' do source 'sftp://root@xyz.imzcloud.local:22/tmp/test.txt' ssh_options agent: true end
重要提示:主机密钥验证
别忘了确保远程主机的公钥已经添加到运行Chef Client的用户的known_hosts文件中,否则会触发主机验证错误。你可以使用Chef的ssh_known_hosts资源来自动化添加主机密钥:
ssh_known_hosts 'xyz.imzcloud.local' do key 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...' # 替换为实际的主机公钥 end
如果是测试环境临时需要绕过主机验证(不推荐在生产环境使用),可以在ssh_options中添加verify_host_key: false,但这会带来安全风险,仅限测试场景使用。
完成以上配置后,remote_file资源就会通过SSH密钥认证拉取SFTP文件,无需在URI中填写密码了。
内容的提问来源于stack exchange,提问作者codec
相关产品推荐
相关产品推荐

