标签: fabric

通过 Python 脚本/非交互方​​式更改用户密码的安全方法

问题

  1. 是否有更安全/更好的方式通过 Python 脚本以非交互方式设置用户密码?我目前的解决方案采用chpasswd面料脚本。另一种选择是在Fabric脚本中使用Pexpect
  2. 我目前设置密码的方法是否存在安全问题?潜在的安全问题,我看到的是,密码显示为明文我的本地终端上进行如下:
    [xxx.xx.xx.xxx] run: echo "johnsmith:supersecretpassw0rd" | chpasswd
    由于我只从笔记本电脑运行Fabric脚本,因此我认为这不是安全问题,但我对其他人的输入感兴趣。

背景

我已经使用Fabric创建了一个 Python 脚本来配置一个新构建的Slicehost Ubuntu 切片。如果您不熟悉 Fabric,它会使用Python SSH2 客户端Paramiko来提供“用于应用程序部署或系统管理任务”的远程访问。

我让Fabric脚本做的第一件事就是创建一个新的管理员用户并设置他们的密码。与Pexpect不同,Fabric 无法处理远程系统上的交互式命令,因此我需要以非交互式方式设置用户密码。目前,我正在使用该chpasswd命令,该命令以明文形式读取用户名和密码。

当前代码

# Fabric imports and host configuration excluded for brevity
root_password = getpass.getpass("Root's password given by SliceManager: ")
admin_username = prompt("Enter a username for the admin user to create: ")
admin_password = getpass.getpass("Enter …
Run Code Online (Sandbox Code Playgroud)

automation scripting python fabric

7
推荐指数
1
解决办法
1万
查看次数

使用 puppet、ansible 或 fabric 滚动更新

我之前有一些带有负载均衡器的码头服务器。现在我想在不停机的情况下更新我的应用程序。当一个码头停机并且不再可达时,负载均衡器会自动将其从列表中删除,所以这不是问题。

主要问题是避免停机时间:因此,我必须确保一次只有一个码头重新启动 - 或者确保至少有 N 个码头在线!

目前我正在使用一个简单的 bash 脚本,我需要手动等待一个码头重新上线,然后再重新启动下一个码头等等。

现在 bash 对于这类东西并不是很理想,我希望有更适合使整个任务自动化的工具。例如http://jetty-number-n.com/ping,如果第 n 个码头在线,我可以使用一个简单的 ping URL响应 OK (200)。

我如何解决这个任务以及使用哪种工具?

感谢@ceejayoz,我找到了 ansible 的滚动更新。但它仍然不是最理想的,因为我需要设置一个固定的超时时间。

ssh puppet fabric ansible

6
推荐指数
1
解决办法
4884
查看次数

在哪里可以找到 python 结构设置示例?

我想知道您对面料脚本的体验如何?觉得有用吗?是否有用于此的示例脚本?复制、设置服务等

我知道有木偶和厨师,但我正在寻找不使用客户端/服务器设置来部署、设置服务器等的东西

你的意见?

deployment python web-server fabric

5
推荐指数
1
解决办法
2805
查看次数

在服务器集群上升级 ubuntu 版本

我有一个大约 50 个 ubuntu 节点的集群,这些节点目前正在运行特立独行的版本。我想将它们升级到 oneiric,但我在选择合适的工具时遇到了困难。

我知道 ubuntu 有“无人值守升级”实用程序,但它仅用于安全升级,不能切换整个版本。有什么类似的可以吗?

现在看来,唯一的选择是使用像 fabric/pssh/capistrano 这样的东西,并让它在每台服务器上运行“do-release-upgrade”。但是“do-release-upgrade”是交互式的,在升级过程中需要用户的一些输入。“do-release-upgrade”工具似乎没有任何 --unattended 参数。

在这样的情况下你会使用什么样的策略?

谢谢!

linux ubuntu cluster fabric

5
推荐指数
1
解决办法
2099
查看次数

如何自动化网站部署到生产,包括缩小 CSS/JS?

目前,我正在使用以下手动过程将我的 PHP 网站从登台部署到生产:

  • 使用在线 YUI 压缩工具缩小 CSS 和 JavaScript 文件。
  • 将原始 CSS 和 JavaScript 文件移动到另一个目录(以备份它们),然后用缩小的 CSS 和 JavaScript CSS 文件替换它们。
  • 开始将所有文件从我的临时服务器复制到我的 Windows PC。
  • 删除暂存 .htaccess 和索引文件,这样它们就不会被复制到生产服务器(这些文件具有暂存环境的特定内容)。
  • 打开 WinSCP 并转到生产服务器上的 Web 根目录,然后将主索引文件切换为“正在进行的更新”,这样如果任何访问者访问该站点,他们就会收到一条消息,说它暂时关闭。
  • 然后使用 WinSCP 从我的 PC 复制到生产 Web 服务器(这会覆盖服务器上的所有现有文件),大约需要 4 分钟才能看到有很多文件。
  • 使用 SSH 登录生产服务器并运行大约 5 个命令来为各种可写目录设置适当的权限,并确保所有内容仍在 www-root 组下。我认为使用 SSH 的上传过程会更改所有现有权限。
  • 将“正在进行的更新”索引文件切换回正常索引。

整个过程非常复杂,大约需要 5-10 分钟,我每次对网站进行更改时都必须这样做,因此它变成了一件苦差事。

现在有没有办法使用一些脚本工具来自动化这个过程?或者是否有一个很好的部署工具,人们可以使用它来完成所有这些工作?我的临时和生产机器是基于 Ubuntu 12.04 服务器的,所以我可能可以使用 bash 脚本来完成一些工作。

我可以看到到目前为止可以进行的一些改进是:

  • 向我的网站添加一些代码,以便它检测它是在 Staging 还是 Production 中,然后根据环境使用原始或缩小的 CSS/JavaScript 文件。这将节省我手动交换文件。
  • 使用命令行 YUI 压缩器并在需要时从脚本文件运行它。
  • 使用类似 rsync 的东西,这样它只会将更改的文件从我的登台服务器复制到生产服务器,而不是覆盖每个文件

我工作过的一家公司使用Fabric 命令行工具来自动化部署和做这种事情。但是,这是一个不错的选择还是有更好的工具?

linux ssh deployment rsync fabric

5
推荐指数
1
解决办法
1984
查看次数

将主机名作为参数传递给 Fabric 任务

我正在尝试组合一个结构脚本,该脚本通过 API 创建一个虚拟实例,然后在该实例上运行 puppet。我有一个创建 VM 的任务,以及一个可以“引导”VM 的任务。但是,我很难将这些链接在一起,因为我不确定如何将第一个任务中生成的一些数据作为主机名传递到第二个任务中。例如

def createVM():
    newhostname = local('/usr/bin/createVM')
    bootstrap(newhostname)

def bootstrap(hostname):
    env.hosts = [hostname]
    run('puppet agent -t')
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,如果我只是执行fab createVM.

这样做的最佳方法是什么?

puppet fabric

5
推荐指数
1
解决办法
1563
查看次数

可以使用 capistrano 或 fabric 从头开始​​设置服务器吗?

我希望有一个轻量级的命令行实用程序,可以用来从头开始设置服务器。

我喜欢 python 的结构或 ruby​​ 的 capistrano,但从我读到的内容来看,它们更多地用于部署目的,而不是设置 apache、mysql、更新补丁等。

我知道还有其他工具,如 puppet,但我不想为服务器等设置主/从,我希望有一个更轻量级的工具。

automation capistrano fabric

4
推荐指数
1
解决办法
861
查看次数

为什么在远程(通过 Fabric)执行时 mount -a 没有正确安装保险丝驱动器?

这是一个奇怪的错误,我不确定它来自哪里。这是我正在做的事情的快速总结。

我正在尝试使用 s3fs(FUSE over Amazon)将 FUSE 驱动器安装到运行 Ubuntu 10.10 的 Amazon EC2 实例。s3fs 是根据说明等从源代码编译的。我还在 /etc/fstab 中添加了一个条目,以便驱动器在启动时安装。这是/etc/fstab看起来的样子:

# /etc/fstab: static file system information.
# <file system>                                 <mount point>   <type>  <options>       <dump>  <pass>
proc                                            /proc           proc    nodev,noexec,nosuid 0       0
LABEL=uec-rootfs                                       /               ext4    defaults        0       0
/dev/sda2   /mnt    auto    defaults,nobootwait,comment=cloudconfig 0   2
/dev/sda3   none    swap    sw,comment=cloudconfig  0   0
s3fs#mybucket /mnt/s3/mybucket fuse default_acl=public-read,use_cache=/tmp,allow_other 0 0
Run Code Online (Sandbox Code Playgroud)

所以好消息是这很好用。重新启动时,连接正确安装。我也可以这样做:

$ sudo umount /mnt/s3/mybucket 
$ sudo mount -a
$ mountpoint /mnt/s3/mybucket 
/mnt/s3/mybucket is a mountpoint
Run Code Online (Sandbox Code Playgroud)

很棒,对吧? …

fuse fabric s3fs

3
推荐指数
1
解决办法
3168
查看次数