bash - 来自变量的 Bash 注入
问题描述
我有一段代码在非常远程的服务器上工作
ID=555
SLEEP_TIME=`ssh user@192.168.1.1 "cat /tmp/$ID.sleep; date >> /tmp/$ID.log"`
echo SLEEP_TIME $SLEEP_TIME
sleep $SLEEP_TIME
是的,$SLEEP_TIME 周围没有报价。ssh user@192.168.1.1 工作正常,没有密码,按键。我看到 /tmp/555.log 刷新。抱歉,我在 sshd 配置中出错了这个远程服务器(上面的代码由 cron 运行)失去了控制。但是我控制服务器 192.168.1.1 并且我可以将任何内容放入 /tmp/555.sleep = $SLEEP_TIME 变量我如何将一些代码注入 $SLEEP_TIME 变量以强制远程服务器执行它?
这是 100% 合法的。两台服务器都属于我的公司。请救救我!事实上,我失去了对远程服务器的控制,因为我使用了复杂的端口转发技巧来访问它,因为它的 IP 被 NAT 了几次。
解决方案
如何向 $SLEEP_TIME 变量注入一些代码,强制远程服务器执行它?
你不能。每个命令发生一次Shell 扩展。外壳扩展执行外壳参数扩展或命令替换。它同时发生。你不能两者都做。您不能先扩展变量,然后第二次扩展它来运行命令替换,因为这是两次扩展。从这里。
(有人可能会争辩说,重定向发生在 bash per this中的shell 扩展之后,但一个简单的测试表明这不是真的。想知道这是不是故意的。但是 Bash 手册不是为语言层编写的。这就是为什么它是一个“手册” ',而不是'规范'。)
引用用于禁止分词。您唯一能做的就是通过将不可解析的参数传递给sleep
或将两个或多个参数传递给睡眠来使脚本出错。
也请不要使用反引号` ` 进行命令替换。它们已被弃用,不能嵌套,不可读且看起来很难看。使用$(...)
.
推荐阅读
- python - 具有共享权重的 Keras Dense 模型
- html - 移动视图中的表格从页面上脱落
- react-native - stickyHeaderIndices 与 FlatList 数据索引不正确匹配
- java - 谁能告诉我在这种情况下我哪里错了?
- ios - 无法从 CMPedometer 数据中检索值 - SwiftUI
- javascript - 为什么我的反应元素渲染多次?
- parallel-processing - 如何在 Linux 上为 netCDF4 并行安装 I/O?
- html - 使用 XLSX 角度将 html 表的特定列导出到 excel 文件
- php - 如何访问 drupal 8 中的节点字段
- awk - 用于解析 xml 和 JS 文件并输出正在导入的 javaScript 库的命令