小编典典

通过ssh传递外部shell脚本变量

linux

当我偶然发现一个我想阻止公司访问的邪恶网站时,我在绑定服务器上编辑了named.conf文件,然后更新了代理服务器黑名单文件。我想用一个bash脚本来自动化它。假设我的脚本称为“
evil-site-block.sh”,其中包含以下内容:

ssh root@192.168.0.1 'echo "#date added $(date +%m/%d/%Y)" >> /var/named/chroot/etc/named.conf; echo "zone \"$1\" { type master; file \"/etc/zone/dummy-block\"; };" >> /var/named/chroot/etc/named.conf'

然后以

$ evil-site-block.sh google.com

当我在远程计算机上查看named.conf的内容时,我看到:

#date added 09/16/2014
zone "" { type master; file "/etc/zone/dummy-block"; };

我不知道如何将“ google.com”作为$ 1传递。


阅读 778

收藏
2020-06-03

共1个答案

小编典典

您的问题:整个命令都用单引号引起来-显然是bash表达式在服务器上而不是在本地扩展。

但这也适用于您$1

简单的解决方案:通过将局部变量包装在单引号中来“报价”报价。

ssh root@192.168.0.1 'echo "#date added $(date +%m/%d/%Y)" >> /var/named/chroot/etc/named.conf; echo "zone \"'$1'\" { type master; file \"/etc/zone/dummy-block\"; };" >> /var/named/chroot/etc/named.conf'

注意:\"$1\"\"'$1'\"

注意:此解决方案是上面问题中发布的单衬套的简单修复。如果这个脚本有可能被其他人执行,或者它可以处理任何形式的外部输出

2020-06-03