我想做以下事情:
我坚持#2.我可以通过Digital Ocean API成功创建水滴,我可以在该authorized_keys区域设置SSH密钥,但如果我允许Digital Ocean创建密钥,那么我无法验证服务器的公钥.
现在通常情况下,如果这是在同一个数据中心内,它就不会引起关注,因为我可以依赖Digital Ocean而不是实施MITM攻击,因为他们无论如何都有root,但是因为我从我的开发机器连接,我需要一个信任公钥的方式.
我尝试过遵循各种cloud-init指南,但我总是得到错误:
ssh root@178.62.69.133
Connection closed by 178.62.69.133
Run Code Online (Sandbox Code Playgroud)
我试图消除任何错误的可能性,我甚至使用base64编码私钥,认为可能存在一些转义问题.
这是我用来创建密钥的命令:
e = "ssh-keygen -t ecdsa-sha2-nistp256 -f #{loc} -q -N #{password} -C \"\""
system(e)
Run Code Online (Sandbox Code Playgroud)
其中扩展到:
ssh-keygen -t ecdsa-sha2-nistp256 -f /tmp/testing-60f42fcf -q -N 77924d8f4fa12a365c8c003ca091f5ad6a2c4c22 -C ""
Run Code Online (Sandbox Code Playgroud)
我然后base64编码,
private_key = `base64 --wrap=0 #{loc}`.chomp
public_key = `base64 --wrap=0 #{loc}.pub`.chomp
Run Code Online (Sandbox Code Playgroud)
并将其放入cloud-init yaml文件中(不想使用,|因为它是Yaml中的一个特殊字符,如果可能的话我想避免它):
#cloud-config
---
runcmd:
- echo test > /root/test
- rm /etc/ssh/ssh_host*
- echo LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tClByb2MtVHlwZTogNCxFTkNSWVBURUQKREVLLUluZm86IEFFUy0xMjgtQ0JDLEY3MDNDNzM1QTAxQzgyNEVBRjhCODA4NkVDREIyMjAwCgpiYlpCa3A2Ujcyd1RRNUsyL2w4QW9YU3FQNllRVjV0aVJETytmU1FqZTlEUjY4MG9wY3RCRGhKRWdPQ0prSkw1CmhOUGxydzUveHFwTHM5UXc3cWJaWlUvRHR0YnlxZTFWUDcyVHBRS1pFL2FDcTdGTWFpbFJrcUpFa3JobVdCcFEKbWtQTW15M3BwVFZZKzJvRDZTdmMzdzZyTW1JTlpKUkltRUxiUk81S2M4bz0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
> /tmp/base64_pri && base64 --decode /tmp/base64_pri …Run Code Online (Sandbox Code Playgroud) 我正在尝试禁用云初始化网络配置。从云初始化文档中,我必须network-config={config: disabled}在内核命令行条目中进行设置。
当我将其设置为/etc/default/grub:
GRUB_CMDLINE_LINUX="network-config={config: disabled}"
Run Code Online (Sandbox Code Playgroud)
并运行update-grub,但它给了我以下错误:
generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.4.0-116-generic
Found initrd image: /boot/initrd.img-4.4.0-116-generic
Found linux image: /boot/vmlinuz-4.4.0-104-generic
Found initrd image: /boot/initrd.img-4.4.0-104-generic
Found linux image: /boot/vmlinuz-4.4.0-97-generic
Found initrd image: /boot/initrd.img-4.4.0-97-generic
error: syntax error.
error: Incorrect command.
error: syntax error.
error: Incorrect command.
error: syntax error.
Syntax error at line 128
Syntax errors are detected in generated GRUB config file.
Ensure that there are no errors in /etc/default/grub
and /etc/grub.d/* …Run Code Online (Sandbox Code Playgroud) 我想通过 Docker 引导我的 Azure VM,并使用 cloud-init 进行 Docker-compose。到目前为止,我尝试了如下所示的方法。
#cloud-config
package_update: true
package_upgrade: true
groups:
- docker: [default]
runcmd:
- [ sh, -c, "curl -sSL https://get.docker.com/ | sh" ]
- [ sh, -c, "sudo curl -L "https://github.com/docker/compose/releases/download/$(git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oP "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | tail -n 1)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose" ]
- [ sh, -c, "sudo chmod +x /usr/local/bin/docker-compose" ]
Run Code Online (Sandbox Code Playgroud)
但它没有安装 docker/ docker-compose 并出现以下错误
cloud-init[958]: 2019-02-28 00:51:02,447 - util.py[WARNING]: Failed loading yaml blob. Invalid format at line …Run Code Online (Sandbox Code Playgroud) 当使用cloud init 的#cloud-config 创建配置文件时,我将如何使用变量来填充值?
在我的特定情况下,我想自动启动 EC2 实例作为预配置的 salt minions。salt minion 云配置示例
假设我想获取特定的 EC2 实例 ID 并将其设置为 salt minion 的 ID。
我将如何为每个实例动态设置值?
我希望我的 openstack 设置能够正常工作,以便当我启动新实例时,8.8.8.8 应添加到 dns-nameservers 中。
这是我的旧 /etc/resolv.conf (在 openstack 中生成的新虚拟机中)-
nameserver 10.0.0.2
search openstacklocal
Run Code Online (Sandbox Code Playgroud)
这是我想要的新 resolv.conf -
nameserver 8.8.8.8
nameserver 10.0.0.2
search openstacklocal
Run Code Online (Sandbox Code Playgroud)
我遵循了本教程,并添加了必要的信息。resolv conf 到我的 cloud-init 的配置文件(/etc/cloud/cloud.cfg) -
manage_resolv_conf: true
resolv_conf:
nameservers: ['8.8.4.4', '8.8.8.8']
searchdomains:
- foo.example.com
- bar.example.com
domain: example.com
options:
rotate: true
timeout: 1
Run Code Online (Sandbox Code Playgroud)
这些更改是在 openstack 主机的 /etc/cloud/cloud.cfg 文件中进行的。然而,这些变化似乎并没有得到体现。
有什么建议么?
write_files与 cloud-init 一起使用时,是否可以附加内容?如果是这样,如何?
write_files: [
{
"path": "/home/user/some-file",
"content": "\nLine to append!"
}
]
Run Code Online (Sandbox Code Playgroud) 我正在配置一个云信息堆栈。我只是尝试cfn-init在使用基于 Amazon Linux 2 的自定义 ami 启动的实例上运行尽可能简单的实例:
EC2ESMasterNode1:
Type: AWS::EC2::Instance
Metadata:
Comment: ES Cluster Master 1 instance
AWS::CloudFormation::Init:
config:
commands:
01_template_elastic:
command:
!Sub |
echo "'Hello World'"
Properties:
ImageId: ami-09693313102a30b2c
InstanceType: !Ref MasterInstanceType
SubnetId: !Ref Subn1ID
SecurityGroupIds: [!Ref SGES]
KeyName: mykey
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash -xe
# Start cfn-init
/opt/aws/bin/cfn-init -s ${AWS::StackName} --resource EC2ESMasterNode1 --region ${AWS::Region}
# Send the respective signal to Cloudformation
/opt/aws/bin/cfn-signal -e 0 --stack ${AWS::StackName} --resource EC2ESMasterNode1 --region ${AWS::Region}
Tags:
- Key: "Name"
Value: …Run Code Online (Sandbox Code Playgroud) 我有一个 cloud-init 文件,它设置了 AWS 实例的所有要求,其中一部分要求是格式化和挂载 EBS 卷。问题是,在某些实例上,卷附加是在实例启动后发生的,因此当 cloud-init 执行时,卷/dev/xvdf尚不存在并且会失败。
我有类似的东西:
#cloud-config
resize_rootfs: false
disk_setup:
/dev/xvdf:
table_type: 'gpt'
layout: true
overwrite: false
fs_setup:
- label: DATA
filesystem: 'ext4'
device: '/dev/xvdf'
partition: 'auto'
mounts:
- [xvdf, /data, auto, "defaults,discard", "0", "0"]
Run Code Online (Sandbox Code Playgroud)
并且希望sleep 60在磁盘配置块之前有类似的东西。
如果整个 cloud-init 的执行可以被延迟,那对我也有用。
另外,我正在使用 terraform 来创建基础设施。
谢谢!
由于使用 git 时的权限问题,我尝试以与 root 不同的用户身份运行 cloud init。有这样的办法吗?
cloud-init ×10
amazon-ec2 ×2
azure ×1
boto ×1
cloud ×1
linux ×1
nameservers ×1
openstack ×1
salt-stack ×1
security ×1
ssh ×1
terraform ×1