繁体   English   中英

远程 SUDO ssh 脚本中的 SED

[英]SED in remote SUDO ssh script

我试图在 1000 台服务器上运行 yum 时禁用 RHN 检查。 它是通过以下方式完成的:

编辑这个文件/etc/yum/pluginconf.d/rhnplugin.conf

[main]
enabled = 0 

我写了一个脚本来远程执行此操作。 我们正在使用个人帐户,我需要使用 SUDO 执行此命令:

for HOST in $(cat serverlist ) ; do echo $HOST; ssh -o ConnectTimeout=5 -oStrictHostKeyChecking=no $HOST -t 'sudo cp /etc/yum/pluginconf.d/rhnplugin.conf /etc/yum/pluginconf.d/rhnplugin.$(date +%F) ; sudo sed -i -e "s/1/0/g" /etc/yum/pluginconf.d/rhnplugin.conf ' ; done

我知道这是一条很长的线路,但为什么它不起作用?

所有单独的命令都独立工作

sudo cp /etc/yum/pluginconf.d/rhnplugin.conf /etc/yum/pluginconf.d/rhnplugin.$(date +%F)

sudo sed -i -e "s/1/0/g" /etc/yum/pluginconf.d/rhnplugin.conf

已尝试转义特殊字符:

sudo sed -i -e "s\/1\/0\/g" /etc/yum/pluginconf.d/rhnplugin.conf

但我一直收到错误:

sed: -e expression #1, char 1: unknown command: `?'

谢谢你的帮助。

sudo(1) 命令需要一个伪电传打字机 (pty),如果没有看到,则失败。 重写您的命令行以使用 su(1) 代替。 使用您的本地 sudo(1) 配置来限制对该脚本的访问,以便只有少数人可以执行该脚本。

我实际上找到了这个问题的答案,或者更确切地说是解决方法。 看到为了下面的代码片段,在那里我得到了-as根- ssh作为(szymonri)到其他主机,然后调用sed命令,作为根用户编辑/etc/hosts的文件。 这一切都归功于base64魔法。

ME=`echo -e "$(hostname -I | awk '{print $1}')\toverlord"`
B64ENC=`echo "sed -i 's/.*overlord/$ME/g' /etc/hosts" | base64`
su - szymonri sh -c "ssh jetson bash -c \\\"echo $B64ENC \| base64 --decode \| sudo bash \\\""
  1. 行:我正在获取我自己的 IP 地址作为/etc/hosts
  2. 行:我是 base64 编码 sed 命令,其中第一行。
  3. 行:我正在调用 SSH shenannigan,在那里我以普通用户身份 su,以用户身份 ssh 到另一个框,并使用 sudo 的功能来编辑文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM