Fujitsu DX200ストレージアプライアンスに対してcrontabから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 ...
のバリアントを使用するネットからの他のソリューションは不可能です。
この問題を回避する方法についてのアイデアはありますか?
自分の質問に答える...
Sshに-t
引数を追加することで問題が解決しました。
コマンドはssh -t -t -t -t user@dx200 ......
のようになります(-tttt
は同じことをする必要があります)。
Sshのmanページは、これが-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.
しかし、「Multiple」の数や、必要な-t
オプションの数を管理するsshコードの内容については何もありません。