web-dev-qa-db-ja.com

cronスクリプトでsshを使用する

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 ...のバリアントを使用するネットからの他のソリューションは不可能です。

この問題を回避する方法についてのアイデアはありますか?

2
Soren A

自分の質問に答える...

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コードの内容については何もありません。

1
Soren A