我在从 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
所需选项数量的内容。