所以我在下面有这个脚本ssh到不同的服务器并将ulimit从一个值更改为另一个值。
for host in $(</tmp/server_list.txt); do
ssh $host 'hostname -s; sudo sed -i.20180206 's/20480/40960/g'' /etc/security/limits.conf
done
问题是因为我们有多个单引号开始和结束脚本不工作
有人可以帮助修改或建议我们可以使用的替代单引号的替代方案吗?
答案 0 :(得分:0)
可以通过管道向ssh发送命令。
一种方法是:
echo "commands" | ssh user@host
在你的情况下你可以写:
for host in $(</tmp/server_list.txt); do
echo "hostname -s; sudo sed -i.20180206 's/20480/40960/g' /etc/security/limits.conf" \
| ssh $host
done
从文件中读取行的更好方法是使用Bash的内置命令read
。将此与将多个参数传递给ssh
相结合,它看起来像这样:
while read host; do
ssh $host hostname -s; sudo sed -i.20180206 s/20480/40960/g /etc/security/limits.conf
done < /tmp/server_list.txt
这更简单。
答案 1 :(得分:0)
s/20480/40960/g
周围的简单引号不是必需的,因为它不包含特殊字符。另外,为了便于阅读,我建议将整个命令放在ssh的单个参数中执行(包括/etc/security/limits.conf
):
for host in $(</tmp/server_list.txt); do
ssh $host "hostname -s; sudo sed -i.20180206 s/20480/40960/g /etc/security/limits.conf"
done
或相反,在其自己的ssh参数中传递每个参数:
for host in $(</tmp/server_list.txt); do
ssh $host hostname -s \; sudo sed -i.20180206 s/20480/40960/g /etc/security/limits.conf
done