You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:52