【问题标题】:How can I pass the result of a local `curl` in the command line to a remote server in one line?如何将命令行中本地“curl”的结果在一行中传递给远程服务器?
【发布时间】:2014-11-20 08:51:14
【问题描述】:

我希望在单行 shell 中完成以下工作。

curl -s icanhazip.com | ssh user@host 'php /path/to/script.php "[PASS_IP_HERE]"'

我需要将我的本地 IP 传递给远程服务器,最好是一行。

今天我是这样做的:

curl -s icanhazip.com // manually copy result
ssh user@host 'php /path/to/script.php "[PASTE_RESULT_HERE]"'

假设本地IP为1.2.3.4,远程IP为5.6.7.8,那么期望的结果更接近:

> curl -s icanhazip.com
1.2.3.4
> ssh user@5.6.7.8 'php /path/to/script.php "1.2.3.4"'
//          How can I pass this dynamically? ---^

【问题讨论】:

    标签: shell curl command-line


    【解决方案1】:

    大概是这样的:

    curl -s icanhazip.com | xargs -I{} ssh user@host 'php /path/to/script.php {}'
    

    【讨论】:

      【解决方案2】:

      您可以使用命令替换:

      ssh -t user@host "php /path/to/script.php $(curl -s icanhazip.com)"
      

      【讨论】:

      • 哇。在您的示例中,我认为命令替换将在远程服务器上运行。因此,如果我的本地 IP 是 1.2.3.4 而我的远程 IP 是 5.6.7.8,那么您是说命令替换会将 php /path/to/script.php "1.2.3.4" 传递给远程服务器?酷。
      • 我没有尝试命令替换,因为我希望它传递远程服务器的 IP 地址而不是本地 IP。导致php /path/to/script.php "5.6.7.8"(如果5.6.7.8 是远程服务器的IP 地址)。
      • 我还没有测试过。你有什么推荐的?
      • 对不起,我想我说的不是很清楚。整个目标是将本地IP(不是localhost,而是本地服务器curl -s icanhazip.com的结果)传递给远程服务器。因此,如果本地 IP 是 1.2.3.4(即在本地服务器上运行 curl -s icanhazip.com 的结果),那么我的目标是将 1.2.3.4 传递给远程服务器,如下所示:php /path/to/script.php "1.2.3.4"。在这种情况下,不需要将远程 IP 传递给它自己。假设本地 IP 为1.2.3.4,远程服务器 IP 为5.6.7.8,你建议如何将1.2.3.4 传递给远程服务器?
      • 所需结果更接近ssh user@5.6.7.8 'php /path/to/script.php "1.2.3.4"',但无需手动粘贴1.2.3.4
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多