首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2跃点ssh运行远程sed命令( sed命令转义)

2跃点ssh运行远程sed命令( sed命令转义)
EN

Stack Overflow用户
提问于 2013-08-14 07:34:04
回答 2查看 1.1K关注 0票数 0

我通常不会在多个ssh跃点上尝试这样做,但由于限制,这是我唯一的选择。

我正在尝试运行以下远程命令,它的工作方式如下:

ssh -i ~/.ssh/host-rsync-key user\@server1 "'sed -i /ADD_NEW_BELOW/a <server>domain</server>' /config.xml"

在混合中添加第二个ssh跃点,我认为shell正在剥离某些东西,并导致this命令永远不会在server2上执行,而是在server1上执行。

ssh -A -t -o -i ~/.ssh/host-rsync-key user\@server1 ssh -A -o -i ~/.ssh/host-rsync-key user2\@server2 "'sed -i /ADD_NEW_BELOW/a <server>domain</server>' /config.xml"

有没有人能提供关于ssh上的sed命令所需的正确转义的帮助?我可以在两个跃点上运行grep命令,没有问题,所以我认为这是特定于与sed命令相关的转义字符。

任何帮助都将不胜感激

EN

回答 2

Stack Overflow用户

发布于 2013-08-14 07:41:56

看起来你的引文可能有误。

这可能会起作用:

ssh -A -t -o -i ~/.ssh/host-rsync-key user\@server1 "ssh -A -o -i ~/.ssh/host-rsync-key user2\@server2 sed -i '/ADD_NEW_BELOW/a <server>domain</server>' /config.xml"

票数 0
EN

Stack Overflow用户

发布于 2013-12-06 15:56:09

我遇到了类似的问题,并做了更多的挖掘,因为我不想转义字符串中的每个空格。调试这种情况的一种方法是尝试回显一个字符串,并将其写入文件,然后查看该字符串在远程主机上的外观。我最终得到的解决方案是始终使用双引号,并对它们进行转义,即:

代码语言:javascript
复制
ssh -A -t -o -i ~/.ssh/host-rsync-key user@server1 "ssh -A -o -i ~/.ssh/host-rsync-key user2@server2 \"sed -i /ADD_NEW_BELOW/a <server>domain</server>\" /config.xml"

代码语言:javascript
复制
ssh -C user@firsthop "ssh -C user@secondhop \"echo 'SELECT field FROM database.table WHERE term=condition' | mysql -u mysqluser --password=mysqlpassword -B \""

请注意,我需要在第二跳中再包含一个字符串,我可以使用单引号,而不需要转义任何特殊字符(但从您的示例中,我认为您甚至不需要这样做)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18220984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档