ssh
他のサーバーに接続し、そこからいくつかのコマンドを実行するbashスクリプトがあります。一部のウェブサイトのerror()Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.
はフレンドリーなメッセージですが、私のbashスクリプトは「停止しました」。このメッセージが表示された後、他のコマンドは実行されません。他のフォーラムではssh -t
メッセージの抑制に効果があると推定されていますが、私には効果がありませんでした。私のコードは次のとおりです
.
.
.
stty -echo
sshpass "pwd" ssh -o StrictHostKeyChecking=no [email protected] 'su -lc "rm -rf tmp"' 2>/dev/null
stty echo
.
.
.
私が使用する理由stty-echo
は、ユーザーをrootに切り替えてパスワードを端末に表示させる必要があるためです(私はそれを望んでいません)。Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.
接続サーバー(ip:1.1.1.1)にrootパスワードを入力しましたが、エラーメッセージ()が表示されました。
どんな提案がありますか?追加の説明が必要な場合はお知らせください。ありがとうございます! (私のbashバージョンはGNU bashバージョン3.2.51(1)です。)
編集する
削除時に表示されるエラーメッセージ2>/dev/null
は次のとおりです。
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
stty: standard input: Invalid argument
答え1
使用前にstdin
端末であることを確認できますstty
。
if [[ -t 0 ]]; then stty -echo; fi
答え2
端末でパスワードとルートパスワードを安全に隠そうとする代わりに、SSHキーペアを使用するのはどうですか?これらのコマンドを実行するとssh-keygen
crypto.pubキーを生成でき、それを各リモートホストのファイルに入れると次/root/.ssh/authorized_keys
のコマンドを実行できます。これにより、パスワードを明確に再入力する必要がなくなります。必要に応じて、このコマンドをcrontabに追加して定期的に設定して他のタスクに時間を費やすこともできます。これは、すべてのキーを生成したコンピュータがsudoユーザーとsudo以外のユーザーの間の共有アカウントではないと仮定します。ssh [email protected] "rm -rf tmp"
これは役に立ちましたが、より良い説明が必要な場合は、私たちに知らせてください。
以前にキーペアを作成したことがない場合は、次のことが役に立ちます。http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/