sshpassを使用してリモートサーバーコマンドの結果を取得するためのいくつかのスクリプトを作成しています。
複数のリモートホストを試す前に、コマンドの結果を取得するために1つのテストサーバーでのみテストを試みました。
このコマンドは、ホストにユーザーが存在することを確認するために使用されます。ユーザーが存在する場合は、結果を印刷したいと思います。だから以下のようにコーディングしました。
#!/bin/bash
exec sshpass -pMY_PASSWORD ssh -o StrictHostKeyChecking=no root@IP_ADDRESS grep USER /etc/passwd | cut -f1 -d:
if [ $? -ne 0 ]
then
echo "command failed..."
exit 1
fi
ただし、上記のスクリプトを試してみると、いくつかのサーバーログインメッセージと以下のエラーが表示されます。
basename: extra operand `tty'
Try `basename --help' for more information.
basename: extra operand `tty'
Try `basename --help' for more information.
ユーザーが存在し、これらのエラーがない場合にのみ結果を取得したいと思います。
誰でも助けることができますか?
ベストアンサー1
リモートサーバーのログインシェル設定ファイルにあるコードは、これらの非対話型ログインを処理するために正しく書かれていません。この問題を解決するとbasename
問題がtty
解決します。 (リモートシステムで一時的にルートの名前を変更して.profile
自分.bash_profile
のものを試してください。エラーが発生した場合はシステムログインスクリプトにあります。そうでない場合はルートのログインスクリプトにあります。withの使用をssh -o StrictHostKeyChecking=no root@IP_ADDRESS id
保護できない可能性があります。あります。)tty
[ -t 1 ] && ...
exec
ただし、これを使用してプログラムを実行するため、sshpass
私たちに示した残りのスクリプトは実行されません。削除するexec
。 (実際に使用する理由を知るまでは絶対に使用しないでください。)しかし、そうしても成功をテストする次のコードは、パイプラインの最後のコマンドの結果のみを確認します。cut
、失敗する可能性が非常に低いです。
証明書ベースの認証sshpass
の代わりに組み込みのプレーンテキストパスワードを使用する特別な理由はありますか?ssh
権限のないアカウントではなく、rootでリモートシステムにログインした特別な理由はありますか?