我正在尋找一種將配置從一台中央電腦推送到多台遠端電腦的方法,而無需在遠端電腦上安裝任何內容。
目的是做一些像使用諸如 之類的工具會發現的事情cfengine
,但在一組沒有設定代理的機器上。這實際上可能是cfagent
在一組現有遠端電腦上進行設定的好技術。
答案1
您可以傳遞腳本並透過管道將其輸入並執行 shell 來使其短暫執行。
例如
echo "ls -l; echo 'Hello World'" | ssh me@myserver /bin/bash
當然,該"ls -l; echo 'Hello World'"
部分可以替換為儲存在本機電腦上的檔案中的 bash 腳本。
例如
cat script.sh | ssh me@myserver /bin/bash
乾杯!
答案2
有幾種方法可以做到這一點。
1:
ssh user@remote_server 'bash -s' < localfile
2:
cat localfile | ssh user@remote_server
3:
ssh user@remote_server "$(< localfile)"
數字 3 是我更喜歡的方式,它允許互動式命令,例如sudo -S service nginx restart
(當您使用 時,#1 和 #2 將使用腳本的其餘部分作為密碼問題的輸入sudo -S
。)
答案3
為此我會推薦 python 的 Fabric:
#!/usr/bin/python
# ~/fabfile.py
from fabric_api import *
env.hosts = ['host1', 'host2']
def deploy_script():
put('your_script.sh', 'your_script.sh', mode=0755)
sudo('./your_script.sh')
# from shell
$ fab deploy_script
您應該能夠使用上述內容來開始。諮詢Fabric的優秀文件做剩下的事情。作為附錄,完全可以在 Fabric 中編寫腳本——無需複製,但應該注意的是,要更改所有電腦上的腳本,您只需要編輯本機副本並重新部署。此外,除了 API 的基本用法之外,您還可以根據腳本目前執行的主機和/或其他變數來修改腳本。這是一種Pythonic Expect。