【问题标题】:Cannot run local Bash script on remote system with ssh -tt无法使用 ssh -tt 在远程系统上运行本地 Bash 脚本
【发布时间】:2018-04-07 06:25:17
【问题描述】:

遇到 bash 问题。本质上,有两个 Redhat 节点,WS01 和 DEV01。我想在 DEV01 上运行的 WS01 上的脚本通过read -p 询问某些信息提示。 Expect 没有安装,也不能安装(很遗憾)。

当我进入时...

ssh root@DEV01 /path/to/script.sh

它返回(BoKS 消息)

no terminal authorization granted

如果我这样做......

ssh -tt root@DEV01 /patch/to/script.sh

返回

TERM: not defined
Illegal variable name

脚本在通过常规 ssh 会话运行时运行良好。使用echo $TERM 检查术语,在两个系统上都设置为vt100。两个系统上的默认 shell 都是 csh,所以我认为它是默认的。试图将调用 bash 的变体放在 ssh 命令中,但一切都显示了相同的结果。

不幸的是,该 ssh 命令的其他变体(感觉我已经尝试过大多数)也给出了相同的结果。

也试过了

ssh -tt root@DEV01 "$(< script.sh)"

基本上我可以在互联网上找到的任何其他内容,但仍然一无所获。在这一点上我的头撞在墙上。

最终,我只需要一种方法来运行本地机器上的 bash 脚本到远程主机上,并允许交互式 shell 允许用户在提示输入数据时输入数据。提前感谢您的帮助。

【问题讨论】:

  • 获取本地输入然后调用脚本但传入用户数据的包装脚本怎么样? (希望这是有道理的)。我几乎可以肯定我曾经做过类似的事情。祝你好运。
  • 听起来你的script.sh 正在做一些奇怪的事情。你能粘贴脚本吗?

标签: linux bash shell ssh redhat


【解决方案1】:

脚本最有可能试图操纵显示脚本输出的终端。在您的情况下,您从 ssh(ing) 到您的脚本的终端。例如,在终端上重写先前写入的输出。 Linux 软件包如ncurses 带有tput 等功能,允许您重写终端输出。

当处理操作想要显示进度并在处理完成后替换该行以显示操作成功时,这将很有用。

示例:假设正在复制文件。你的终端可能会显示

file copy in progress ...

并且该行将在操作结束时被替换或附加到读取

file copy completed!

您需要从 ssh 脚本文件中删除终端操作行或提供必要的权限(这在很多情况下是不可能的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-10-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多