在 cron 脚本中使用 ssh

在 cron 脚本中使用 ssh

我在从 crontab 针对 Fujitsu DX200 存储设备运行 ssh 时遇到问题。

当从终端运行命令时,使用 RSA 密钥连接一切正常,但是当我将命令嵌入脚本并从 cron 运行它时,它会失败并显示“不会分配伪终端,因为 stdin 不是终端。”

命令是ssh user@dx200 "show performance -type host-io"

根据网上的许多文章,将数字-t作为参数添加到 ssh 应该会强制分配 PTY。在开发该脚本的 RedHat 上,它通过添加-t -t -t(或-ttt) 来工作,但在 Ubuntu 上运行时情况并非如此。

使用 ssh -T(禁用伪 tty 分配)会导致 dx200 登录失败,并出现“需要 FUJITSU Storage ETERNUS 登录...” - 也就是说,无法使用 RSA 密钥登录。

网络上的其他解决方案,使用变体ssh ... /bin/bash <<EOF ...是不可能的,因为我们无法在存储设备上启动 shell。

关于如何解决这个问题有什么想法吗?

答案1

回答我自己的问题...

-t向 ssh添加一个额外的参数解决了这个问题。

该命令现在看起来像ssh -t -t -t -t user@dx200 ......-tttt应该执行相同的操作)。

ssh 的手册页对 -t 有如下说明:

 -t      Force pseudo-tty allocation.  This can be used to execute arbi-
         trary screen-based programs on a remote machine, which can be
         very useful, e.g. when implementing menu services.  Multiple -t
         options force tty allocation, even if ssh has no local tty.

但没有说明“多个”是多少,也没有说明 ssh 代码中控制-t所需选项数量的内容。

相关内容