远程SUDO ssh脚本中的SED

时间:2015-05-09 10:27:08

标签: linux bash ssh sed remote-access

我试图在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: `?'

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

sudo(1)命令需要伪电传(pty),如果没有看到,则会失败。重写命令行以改为使用su(1)。使用本地sudo(1)配置来限制对此脚本的访问,因此只有少数几个可以执行脚本。

答案 1 :(得分:0)

我实际上找到了这个问题的答案,或者说是解决方法。请参见下面的代码片段,在这里我以-em-root身份以 me (szymonri)身份到其他主机,然后以root身份调用sed命令以编辑System.Data.SqlClient.SqlException: 'CREATE FILE encountered operating system error 123(The filename, directory name, or volume label syntax is incorrect.) while attempting to open or create the physical file 'C:\Program Files\Microsoft SQL Server\MSSQL13.TESTSERVER\MSSQL\DATA\|DataDirectory|_Database_Schools_dtSchools.mdf.mdf'. 文件。感谢/etc/hosts的魔法。

base64
  1. 专线:我正在获得自己的IP地址作为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 \\\"" 专线
  2. line:我正在使用base64编码sed命令,其中包含第一行。
  3. line:我正在调用SSH shenannigan,我以常规用户su身份登录,以ssh身份切换到另一个邮箱,并使用sudo的功能来编辑文件。