EDIT 2013年12月: ここでは短い答えはあります:1日乗りまたは2に慣れるためにPythonライブラリ "Fabric"を使用してください。ファブリックは、リモートタスクを1台以上のサーバーにディスパッチする際に、大量の問題を解決します。
パスワードレスコマンドを実行できるターゲットシステムでユーザ名を設定したいと思うかもしれません(また、Fabricを使用してそれを行うこともできます)。
Fabricのいくつかの側面は完璧にPythonicではありません。また、ファブリックは、まずシステム管理者を念頭に置いて設計されており、サーバーに対してコマンドをバッチ処理したい人もいます。非常に特殊なサーバーやシナリオを自動化するなど、何か他のことをしようとしているなら、 "設定"や@rolesデコレータがどのように機能するかを完全に理解したいでしょう。私は戻って見ていない...
(そして、私はリモートシステムで働いているリモートSSHコマンドを持っている、つまり、サーバーAはサーバーBにサーバーCに接続するように要求し、コマンドの戻り値はAはサーバーCと直接通信しませんが、サーバーAには表示されます)。
元の応答: この問題の解決方法は多数あります。コースの馬;異なる状況では他のものより優れているものもあります。
"いいえTTY"エラーを解決する方法は、質問されました。これは焦点になっているようですので、sudoersに関する話はTTYの問題を回避するための回避策に過ぎないと思います。
オプション1)Askhatの答えは素晴らしい...ほとんどの時間。実際には、より多くのターゲットシステムで動作する "-tt"を常に指定してください。
ParamikoのようなSSHライブラリを使用している場合でも、「-t」を直感的に実行する方法はありません。
オプション2)私の答えは - STDINであるASKPASSを指定することです。この例では、sudoのパスワード要件とTTYの両方を満たしています。 $ shell> ssh [email protected] 'echo "password" | sudo -S echo "foobar"'
オプション3)すべてのユーザーまたは一部のユーザーのパスワードを確認しますが、これは運用サーバーでは問題になりません。
オプション4)あなたは、リモート「requiretty」(または設定することができ、全てまたはsudoersファイルで一部のユーザーのための「!requiretty」。もう一度、生産ボックスにクールではない。
これは、サーバーの変更を避けるのがベストです。いつかそのサーバーは置き換えられ、設定はデフォルトに戻り、スクリプトは機能しなくなります。
すべてのオプションを理解すると、より多くの自動化の扉が開きます(たとえば、ラップトップはサーバーのホスト名のリストに接続して、それらのサーバー上でそれらのサーバーにsudoタスクを実行することができます)。
...と難しい方法:
一つの利点は、あなたがそれで「の... [須藤]パスワード」のないファイルへのリモートコマンドの出力をリダイレクトすることができるということですか? –
@ bradley.ayers:問題は 'sudo'がttyからパスワードを読みたいということです。あなたがsudoのためのttyを提供するか、sudoのパスワードチェックを避けるかのどちらかです。後者は、セキュリティを確保したい場合にはより困難です。 – nosid
@nosidありがとう。 –