Linux

如何將 /etc/hosts 複製到我所有的機器上?

  • November 1, 2009
import os, sys, time

servers = ['dev','admin','db1']
for s in servers:
   cmd = 'scp /etc/hosts regular_user@%s:/etc/hosts' % s
   print cmd
   os.system(cmd)

我已經編寫了這個腳本來將我目前的 HOSTS 文件複製到我的所有其他伺服器。但是,我想從普通使用者而不是 ROOT 執行此操作。

由於覆蓋 /etc/hosts 需要 root 權限,我想做SUDO。如何將 sudo 放入該腳本中?

這不起作用,因為更改 /etc/hosts 文件的權限被拒絕。

cmd = 'sudo scp /etc/hosts regular_user@%s:/etc/hosts' % s

cat /etc/hosts | ssh otherhost "sudo sh -c 'cat >/etc/hosts'"會成功的。

您需要在遠端主機上而不是在本地執行 sudo。顯然,要使其正常工作,您在遠端主機上的帳戶將需要 sudo 權限才能執行相關的複制命令。它看起來像這樣:

cmd = 'scp /etc/hosts regular_user@%s:/tmp/hosts' % s
os.system(cmd)
cmd = 'ssh regular_user@%s sudo cp /tmp/hosts /etc/hosts' % s
os.system(cmd)

您可能會發現使用像 fabric 這樣的框架或像 cfengine 或 puppet 這樣的配置管理系統是一個更好的長期選擇……

引用自:https://serverfault.com/questions/80277