【发布时间】:2012-01-19 23:50:24
【问题描述】:
我陷入了一些烦人的境地。
在我的桌面和生产服务器之间有一个机器链。像这样的:
desktop -> firewall 1 -> firewall 2 -> prod_box 1
-> prod_box 2
-> ...
我正在寻找一种通过 ssh 自动部署到产品盒的方法。
我知道通常有多种解决方案,但我的限制是:
- 不允许对防火墙 2 进行更改
- 不允许对 prod 框进行配置更改(仅限内容)
- 防火墙 1 有我的本地用户帐户
- firewall 2 和 prod 以 root 身份访问
- 端口 22 是每个链接之间唯一开放的端口
所以,总的来说,我要部署的命令顺序是:
scp archive.tar user@firewall1:archive.tar
ssh user@firewall1
scp archive.tar root@firewall2:/tmp/archive.tar
ssh root@firewall2
scp /tmp/archive.tar root@prod1:/tmp/archive.tar
ssh root@prod1
cd /var/www/
tar xvf /tmp/archive.tar
它比现实中的要复杂一些,但这是对要完成的任务的基本总结。
我已经把我的 ssh 密钥放在了 firewall1:/home/user/.ssh/authorized_keys,所以没问题。
但是,我不能对 firewall2 或 prod 盒执行此操作。
如果我可以在本地从 shell 脚本运行这个(上面的命令),输入我的密码 4 次并完成它,那就太好了。可悲的是,我不知道该怎么做。
我需要一些方法来链接 ssh 命令。我花了整个下午尝试使用 python 来完成这项工作,最终放弃了,因为 ssh 库似乎不支持密码输入式登录。
我可以在这里做什么?
一定有某种库可以用来:
- 使用密钥文件或动态输入的密码通过 ssh 登录
- 通过 ssh 隧道链远程远程 shell 命令
我不确定要标记这个问题,所以我暂时将其保留为 ssh,部署。
注意。使用 ssh 隧道和部署工具来推送这些更改会很棒,但是我仍然必须手动登录到每个盒子来设置隧道,而且由于端口阻塞,这无论如何都行不通。
【问题讨论】:
-
您能否将 bash 脚本永久保留在防火墙 1 和 2 上?
-
不。这是一个只读文件系统(/tmp 除外;所以我想是的,暂时在 /tmp 我可以...)
-
哦,这是一个乐趣是吗?一分钟。
标签: deployment ssh