【问题标题】:Executing SSH with bash is prompting for password使用 bash 执行 SSH 提示输入密码
【发布时间】:2023-03-28 09:00:01
【问题描述】:

将脚本发送到后台后,我在从 shell 脚本运行 SSH 时遇到问题。错误是“预期有更多令牌”,我在网上读到我可以将 SSH 调用嵌套在 bash 命令中,如下所示,但这样做会提示输入密码,即使我输入了正确的密码(我不想做)它不会工作。

这会从命令行提示输入密码

bash -c "ssh NJ\\NJDSSINFADM@dc01nj2dwifdv02.nj.core.him pmcmds DFD_ETIME wf_TEST"

这在前台的命令行或脚本中有效,但在后台运行脚本时无效

ssh NJ\\NJDSSINFADM@dc01nj2dwifdv02.nj.core.him pmcmds DFD_ETIME wf_TEST

【问题讨论】:

  • 这是确切的错误信息吗?还是Expression is not complete; more tokens expectedthis question 一样?
  • 需要更多令牌,抱歉。
  • 看看我链接的问题,问题不是来自这一行。
  • 我做到了。这是我脚本中的确切代码,只要我不将脚本发送到 bg 就可以正常工作: jstat=$(ssh NJ\\NJDSSINFADM@dc01nj2dwifdv02.nj.core.him pmcmds $fl $wf) let jstat=echo $jstat|sed -e 's/[^0-9]//g'
  • 这里怎么把车厢rt和lines放到回复里?

标签: linux bash shell ssh


【解决方案1】:

不要使用let 给带有字符串的变量赋值。它将值视为算术表达式,并且您的值不打算以这种方式处理。

jstat=$(echo $jstat|sed -e 's/[^0-9]//g')

您也不需要使用外部命令从字符串中删除字符,您可以使用参数扩展运算符进行替换。

jstat=${jstat//[^0-9]/}

有关此语法的说明,请参阅Bash Manual

【讨论】:

  • 我不是要从字符串中删除字符,而是检查命令的退出状态。
  • 我不明白你是如何使用sed 替换的。
  • 如果您需要更好的帮助,请发布出现错误的脚本代码。
  • 问题是我在BG中运行时不喜欢传递变量,但是如果我在FG中运行就可以了
  • FG还是BG没关系,所以问题出在你的脚本上。
猜你喜欢
  • 2016-04-08
  • 1970-01-01
  • 2012-08-11
  • 2022-01-06
  • 2014-02-28
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
相关资源
最近更新 更多