我通常不会在多个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命令相关的转义字符。
任何帮助都将不胜感激
发布于 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"
发布于 2013-12-06 15:56:09
我遇到了类似的问题,并做了更多的挖掘,因为我不想转义字符串中的每个空格。调试这种情况的一种方法是尝试回显一个字符串,并将其写入文件,然后查看该字符串在远程主机上的外观。我最终得到的解决方案是始终使用双引号,并对它们进行转义,即:
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 -C user@firsthop "ssh -C user@secondhop \"echo 'SELECT field FROM database.table WHERE term=condition' | mysql -u mysqluser --password=mysqlpassword -B \""请注意,我需要在第二跳中再包含一个字符串,我可以使用单引号,而不需要转义任何特殊字符(但从您的示例中,我认为您甚至不需要这样做)。
https://stackoverflow.com/questions/18220984
复制相似问题