2016-05-25 12 views
1

私の目標は Linuxは

  • (パスワードなしのキーがすでにsteupある)リモートSSHセッションにログインし、マスターシェルスクリプトから次

    • を自動化することであるが相互に作用使用した後にbashスクリプトに制御を戻すない期待します私はrootアクセスが必要なので、私はログインを期待して使用しています。つまり"su"を送信し、 "Password:"を期待して、 "を送ってください。
    • 次に、expectスクリプトを呼び出したbashスクリプトに制御権を戻し、rootとしてログインしたさまざまなSSHコマンドを実行したいと思います。

    これは可能ですか、それともすべてを期待通りに行う必要がありますか?

  • +1

    ...予想外の方法で間違って行くことができ、より少ない部分を持って、この種のもの

    spawn ssh $remotehost sudo /usr/local/bin/DoTheWonderfulThing 

    :あなたはまたのような、自動化のためのより良い作品sshの形式に切り替えを検討してください働いていない?私たちが見ることができるいくつかの証拠を示してください。デバッグが有効になっている状態でexpectを実行すると便利です( 'expect -d script.exp') –

    答えて

    1

    問題は、さまざまなコミュニケーション層が残っていなければならないということです。あなたが気づいている以上に多くのことが起こっています。

    あなたのモデルがこれです:

    +------+ expect +-----+ su +----------------+ 
    | bash | ---------> | ssh | -----> | remote-context | 
    +------+   +-----+  +----------------+ 
    

    だが、実際に起こっているのはこれです:

    +----------------+ +----------------------+ +----------------------------+ 
    | local terminal | |  expect  | |  remote terminal  | 
    |    | | +------------------+ | | +------------------------+ | 
    | +------+ | | | virtual terminal | | | |   bash   | | 
    | | bash | -----> | |     | | | | +--------------------+ | | 
    | +------+ | | |  +-----+  | | | | |   su   | | | 
    |    | | |  | ssh | ---------> | | | +----------------+ | | | 
    +----------------+ | |  +-----+  | | | | | | remote context | | | | 
            | +------------------+ | | | | +----------------+ | | | 
            +----------------------+ | | +--------------------+ | | 
                   | +------------------------+ | 
                   +----------------------------+ 
    

    またはそのような何か(私はネットワークで何ビットのほとんどを省略しましたが、例えば)。 のレイヤリングが行われていますが、そのほとんどはあなたが気付いていません。しかし、sshexpectの中で実行されているため(自動化機能を利用するために)、がexpectで制御されているローカル仮想端末で実行されていることを意味します。 bashは制御を直接取ることができません。は仮想端末のマスター側の方法を知らないので、とsshdとなります。

    代わりに、コードの残りの部分を直接期待して書くか、引数として実行するコードを提供する必要があります(ある意味では、おそらくファイルから引っ張られます)。 send

    は、その発信者からのテキストの行を読み取るためにgets stdinを使用することができ、argv変数から引数を取得する期待、そしてopen/read/closeは、ファイルの内容にプルします。


    あなたはsuの代替としてsudoを知っていますか?これは、特定の要求元ユーザーに対して完全にパスワードなしの操作を許可するように構成することができます。これは、あまりにも大きなセキュリティホールを露出させることなく、システムの操作を可能にするのに役立ちます。それが動作たら何

    +0

    ありがとうございました。私が直面している問題の大きな要約です。それらの提案のいくつかを行ってもらえますか? – mgibson