1:

1:

我正在尋找一種將配置從一台中央電腦推送到多台遠端電腦的方法,而無需在遠端電腦上安裝任何內容。

目的是做一些像使用諸如 之類的工具會發現的事情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。

答案4

正如中所解釋的這個答案您可以使用特雷多克:

ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH

您必須小心使用heredoc,因為它只是發送文本,但它並不真正等待回應。這意味著它不會等待您的命令被執行。

相關內容