【发布时间】:2018-03-10 02:01:16
【问题描述】:
从我的 Windows 系统,我通过 SSH 连接到远程系统 [remote1],然后连接到 remote1 可以连接到的另一个远程系统 [remote2],但我的 Windows 系统没有。
这是一个有效的例子;
plink -ssh -pw password -batch root@remote1 ssh remote2 "sed -i 's/param=.*/param=newValue/' /root/test.txt"
此例程通过 Plink 连接到 remote1,然后通过ssh 连接到 remote2,然后检查字符串 param=,如果存在,则将其替换为 param=newValue。同样,这是有效的。
这就是不工作的地方;
plink -ssh -pw password -batch root@remote1 ssh remote2 "grep -q -F 'param=newValue' /root/test.txt || echo 'export param=newValue' >> /root/test.txt"
此例程以相同的方式连接到 remote1 和 remote2,然后搜索param=newValue,如果不存在,则将param=newValue 附加到文件末尾。当我在 Windows 命令行上运行它时,它需要几秒钟然后退出而没有错误,但 test.txt 文件没有改变。
如果我使用 putty 远程访问 remote1,然后从 ssh remote2 "grep ... 开始运行相同的命令,那么它确实会附加 test.txt 文件。
我尝试转义| 和>,但都没有成功。
我已经确定命令的后半部分是失败的部分。
echo 'export param=newValue' >> /root/test.txt
更具体地说,它似乎是重定向部分,因为我可以在删除重定向时回显到控制台。
【问题讨论】:
-
您是否尝试将
ssh ...部分移动到文件并使用Plink 的-m开关? -
使用文件的好主意,无需 -m 开关即可工作。谢谢。
-
好的,我假设您选择使用输入重定向,对吧?请注意,尽管存在差异。看我的回答。
标签: shell batch-file ssh putty plink