【问题标题】:Alternative ways to issue multiple commands on a remote machine using SSH?使用 SSH 在远程计算机上发出多个命令的替代方法?
【发布时间】:2011-10-05 18:22:27
【问题描述】:

似乎在this question 中,答案是用分号分隔语句。但是,如果我们使用多个 if 语句和复杂的引号字符串来编写复杂的脚本,这可能会变得很麻烦。我想。

我想另一种选择是简单地一个接一个地发出多个 SSH 命令,但这又会很麻烦,而且我没有设置公钥/私钥身份验证,所以这会要求输入一堆密码次。

理想情况下,我希望与交互式 shell 体验非常相似:在脚本中的某一时刻,您 ssh 进入@the_remote_server,它会提示您输入密码,您(以交互方式)输入密码,然后从那一刻开始直到您的脚本发出“退出”命令,脚本中的所有命令都在远程机器上进行解释。

这当然不行:

ssh user@host.com
  cd some/dir/on/remote/machine
  tar -xzf my_tarball.tgz
  cd some/other/dir/on/remote
  cp -R some_directory somewhere_else
exit

还有其他选择吗?我想我可以直接从我的脚本中取出那部分并将其粘贴到远程主机上的脚本中。嗯。现在我正在维护两个脚本。另外我想要一个小配置文件来保存默认值和其他东西,我也不想在两个地方维护它。

还有其他解决方案吗?

【问题讨论】:

    标签: unix shell scripting


    【解决方案1】:

    使用heredoc语法,比如

    ssh user@host.com <<EOD
     cd some/dir/on/remote/machine
     ...
    EOD
    

    或管道,如

    echo "ls -al" | ssh user@host.com
    

    【讨论】:

      【解决方案2】:

      使用heredoc。

      ssh user@host.com << EOF
      cd some/dir/on/remote/machine
      tar -xzf my_tarball.tgz
      cd some/other/dir/on/remote
      cp -R some_directory somewhere_else
      EOF
      

      【讨论】:

      • 随着您的heredoc 脚本变得更加复杂(尤其是变量),您需要引用heredoc 定界符:&lt;&lt; 'EOF'。然后,heredoc 将按字面意思发送到远程机器,而您的本地 shell 不会尝试解释它。
      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      相关资源
      最近更新 更多