【问题标题】:How to write a multi-line shell script如何编写多行 shell 脚本
【发布时间】:2013-04-05 08:23:13
【问题描述】:

我有一台远程机器,我想在其中替换文件的内容。

我正在使用以下命令

ssh abc@host
abc
sed -i s/enable=false/enable=true/g /config/pqr.properties

其中 abc 是用户名和密码。

如何将其放入 shell 脚本中?

【问题讨论】:

  • 你可以使用ssh ... "command1; command2"
  • 改用密钥对。如果这不是一个选项,你需要去期待。

标签: linux shell unix shell-exec


【解决方案1】:

坏方法:

编写一个expect 脚本将密码提供给 ssh。

正确的方法:

为 ssh 生成密钥并通过 ssh 密钥进行授权。您的命令将如下所示:

ssh abc@host 'sed -i s/enable=false/enable=true/g /config/pqr.properties'

【讨论】:

  • 我已将此命令放在一个文件名 abc 中,现在当我执行它时,它不会要求输入密码,但它也不会修改文件。有什么办法可以在shell中提供密码
  • 您是否制作了密钥并将其复制到目标服务器?
  • 我要使用的远程机器将是动态的,所以我不能在那里放一个带密钥的文件。
  • 因此,在这种情况下,您必须为 ssh 编写一个 expect 脚本(或直接在 google 上搜索)。
  • 我写了一个期望脚本并且它为我工作。感谢你的帮助。 :)
【解决方案2】:

按照此处所述设置授权密钥http://wiki.qnap.com/wiki/How_To_Set_Up_Authorized_Keys

ssh user@host command 应该随后在脚本中工作。

【讨论】: