当我使用 Chef 在系统中创建用户时,我总是将其公钥上传到.ssh/authorized_keys. 当用户第一次登录时,他需要“更改”他的密码。为此,使用存根密码,因此他可以输入“当前”密码。这是现在的样子:
ssh user@host
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Connection to host closed.
Run Code Online (Sandbox Code Playgroud)
当前密码是众所周知的(我会告诉你一个秘密initial:),无论如何这是无用的。如何避免current第一次询问密码?(更强调一下,它是安全的,因为用户已经使用他的公钥进行了身份验证)。
我有一个用例,其中厨师食谱需要使用“remote_file”来获取虚拟文件,并且需要通过 HTTP 代理进行获取。这是行不通的,因为厨师客户端不使用系统代理设置......它从/etc/chef/chef-client.rb
那么如何将代理设置(或一般设置)放入chef-client.rb客户端的文件中?
理想情况下,我希望它在客户端引导时发生,但我不知道如何做到这一点,除非破解代码。
另一种可能性是我可以创建一个更新chef-client.rb文件的配方。但这让我觉得有点危险。这意味着您需要在运行前运行 Chef-client 两次,假设第一次运行中缺少的代理设置导致运行最终失败。
有想法该怎么解决这个吗?
我正在使用 Amazon EC2 创建实例。我在这里阅读:在 EC2 的刀文档中,我需要设置:
# EC2:
knife[:aws_access_key_id] = "Your AWS Access Key"
knife[:aws_secret_access_key] = "Your AWS Secret Access Key"
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试从我的 Knife.rb 中的 AWS 控制台设置安全凭证时,我得到一个
ERROR: You did not provide a valid 'AWS SSH Key Id' value.
Run Code Online (Sandbox Code Playgroud)
而且,当我创建一个新的“密钥对”时,我得到了一些 .pem 文件,这也让我感到困惑。
如何设置我的刀和 EC2 以创建新节点?
我能够通过以下方式使用刀访问 AWS:http : //www.agileweboperations.com/amazon-ec2-instances-with-opscode-chef-using-knife
现在,我得到了一个几乎可以工作的刀命令:
$ knife ec2 server create -r "role[base]" -I ami-c1aaabb5 -f t1.micro -S knife -i ~/.ssh/knife.pem --ssh-user ubuntu --region eu-west-1 -Z eu-west-1a
Run Code Online (Sandbox Code Playgroud)
实例 ID:i-xxxxxx
口味:m1.small
图片:ami-399ca94d
地区:eu-west-1
可用区:eu-west-1a
安全组:默认
标签:{"姓名"=>"i-xxxxxx"}
SSH 密钥:刀
等待服务器......................
公共 DNS 名称:ec2-xxxxxx.eu-west-1.compute.amazonaws.com
公网IP地址:yy.yy.yy.yy
私有 DNS 名称:ip-xxxxxxx.eu-west-1.compute.internal
私有IP地址:zz.zz.zz.zz
等待 sshd ......................................
但是现在我超时了。有什么想法/建议如何创建准备好进行 Chef 配置的 EC2 实例?
谢谢!
我正在使用 Chef Solo 为 Ubuntu 12.04 提供基于 Opscode 的“Bento”框的 Vagrant VM。当它完成配置并且我第一次通过 SSH 登录时,MOTD 告诉我有软件包和安全更新。然后我sudo apt-get upgrade手动运行,这会删除后续登录时的消息。有没有办法用 Chef 自动化这一步?“apt”食谱似乎没有处理这个问题。我所有的谷歌搜索只找到关于apt-get update但不是apt-get upgrade。我可以在我的 Chef 配方中执行 apt-get 命令,但是在升级过程中,粉红色屏幕上有一个伪 GUI,我必须在其中选择要安装的驱动器(我认为这称为 GRUB,我是新手到 Ubuntu),我不确定如何使用 Chef 自动化这部分。
假设我有两本食谱,Foo 和 Bar。在食谱 Foo 中,attributes/default.rb 包含以下内容:
default[:test] = [{:baz => 'A', :qux => 'B'}]
在食谱 B 中,我想用另一个对象扩展该数组(即合并两个数组): {:baz => 'C', :qux => 'D'},最好是从一个食谱中。
我尝试放置以下 Bar 的配方或属性文件:
default[:test] = [{:baz => 'C', :qux => 'D'}]
期望两者合并并导致:
node[:test] == [{:baz => 'A', :qux => 'B'}, {:baz => 'C', :qux => 'D'}]
但事实并非如此。相反,在 Chef-Solo 运行期间,数组中仅包含两个对象之一。我也尝试过default.override并default.set得到相同的结果。如何合并两个数组?
谢谢。
我正在尝试为几个 .NET 应用程序自动化我们的 CI 流程,在一个完美的世界中,我想为每个应用程序启动一个 Windows EC2 实例,引导该实例以安装 Chef Solo,然后执行一个 Chef 配方以安装一些依赖项和打包软件本身。
但是 - 我是一个新手,即使这是可行的也不知道,更不用说从哪里开始了:)
我非常精通 AWS 的命令行工具,因此可以正常启动 AMI,但除此之外,我很受困。我想避免构建一个预装了 Chef 的自定义 AMI,因为这会失去很多优势。
我认为这基本上是我需要做的 - 但(不出所料)专注于 Linux:
http://www.opinionatedprogrammer.com/2011/06/chef-solo-tutorial-managing-a-single-server-with-chef/
有没有人有一个链接到以前做过这个或类似的人?或者更好的方式来实现我想做的事情?
任何帮助表示赞赏。
我最近开始学习如何使用 Vagrant 来启动本地开发环境。(在对各种 WAMP 堆栈选项感到沮丧之后)到目前为止,Vagrant 很棒……学习曲线很小,但从长远来看看起来很有希望。
在尝试使我的 VM 看起来像我的在线服务器的乏味过程之后……在我看来,Vagrant 缺少了一个部分。现在的过程似乎或多或少像手动试错。第一次快速设置或轻松保持与上游服务器同步的理想选择。
诚然,我可能不确切知道我在寻找什么......因此问题。
是否有一种简化的方法可以从现有的 CentOS 5.10 服务器导出设置以进行本地 Vagrant 配置?(人偶、厨师、贝壳或其他)
这样的事情是我所设想的......
(连接到在线服务器...)
理想情况下,这将在配置期间运行,并且基本上保持本地版本与在线版本同步。这将消除不断手动调整本地设置以保持同步的需要。如果某些内容在线更改(由主机或内部)......它会自动传播。(当然,理想情况下,您可以标记设置以根据您的需要调整行为)
或者,我想如果我可以在不打包各种用户特定数据的情况下打包在线服务器,那也可以。但是,据我所知,这似乎不太可能……而且效率肯定不会很高。
警告
就我个人而言,我使用的是带有 cPanel 的 CentOS 5.10 服务器。cPanel 似乎在服务器端做了很多不一定立即显而易见的事情。一个例子是许多包名称以 cPanel 开头,看起来是专有的,但同时与我可能想要同步的内容相关。(例如cpanel-php53)据我目前所知,这些不能轻易同步......因此需要采取变通办法。另一个例子可能与预期的路径不同,但我不太确定,因为我对 CentOS 和 cPanel 的默认安装不够熟悉,无法确定任何特性。
到目前为止我所做的...
在我决定询问是否有更好的方法可以与 Vagrant 更紧密地合作之前,我做了一些事情。这并不可怕,但并不真正“精简”或全面。以下是详细信息...
我学会了如何yum repolist all在两台机器上运行以及如何使用 来查看文件系统中的 repos cd /etc/yum.repos.d; ll;,但没有学习如何使用此信息自动同步 repos。
我写了一个 shell 脚本来让本地的包与远程的包非常接近。然而,虽然它做得很好,但它并不完美,我想知道是否有更好的方法。问题...
#!/usr/bin/env bash
# This script …Run Code Online (Sandbox Code Playgroud) 我正在厨师做我的第一个食谱。我创建了一本我称之为 common 的食谱,只有一个食谱(default.rb):
apt_repository "mariadb-repo" do
uri "http://tedeco.fi.upm.es/mirror/mariadb/repo/10.1/ubuntu"
distribution "trusty"
components ["main"]
arch "amd64"
keyserver "keyserver.ubuntu.com"
key "CBCB082A"
end
Run Code Online (Sandbox Code Playgroud)
我在 metadata.rb 的末尾添加了“depends 'apt'”。如果我运行:
Starting Chef Client, version 12.5.1
resolving cookbooks for run list: ["common"]
================================================================================
Error Resolving Cookbooks for Run List:
================================================================================
Missing Cookbooks:
------------------
No such cookbook: apt
Expanded Run List:
------------------
* common
Running handlers:
[2016-01-28T13:07:17+00:00] ERROR: Running exception handlers
Running handlers complete
[2016-01-28T13:07:17+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 01 seconds
[2016-01-28T13:07:17+00:00] …Run Code Online (Sandbox Code Playgroud)