9

そこで、SSH ログインを自動化したいと考えました。私が使用しているホストでは、このサーバーでのキー認証が許可されていないため、より工夫する必要がありました。

シェル スクリプトについてはよくわかりませんが、いくつかの調査で、'expect' コマンドと、まさにこの目的でそれを使用するスクリプトが示されました。スクリプトをセットアップして実行したところ、完全にログインできました。

#!/usr/bin/env expect -f

set password "my_password"

match_max 1000

spawn ssh -p 2222 "my_username"@11.22.11.22

expect "*?assword:*"
send -- "$password\r"
send -- "\r"

expect eof

最初は、必要に応じて実行されます。

Last login: Wed May 12 21:07:52 on ttys002
esther:~ user$ expect expect-test.exp
spawn ssh -p 2222 my_username@11.22.11.22
my_username@11.22.11.22's password: 
Last login: Wed May 12 15:44:43 2010 from 20.10.20.10


-jailshell-3.2$ 

しかし、それが成功の終わりです。

コマンドは機能しませんが、Enter キーを押すと新しい行が作成されます。矢印キーおよびその他の非英数字キーは、'^[[C'、'^[[A'、'^[OQ' などの記号を生成します[1]。

期待スクリプトによって最初に作成された 2 つのプロンプトを除いて、他のプロンプトは表示されません。無視されたコマンドは、タイムアウトになるとローカルシェルによって実行されます。例:

-jailshell-3.2$ whoami
ls
pwd
hostname

(...時間が経過し、タイムアウトが予想されます...)

esther:~ user$ whoami
user

esther:~ ciaran$ ls
Books       Documents   Movies      Public      
Code        Downloads   Music       Sites       
Desktop     Library     Pictures    expect-test.exp

esther:~ ciaran$ pwd
/Users/ciaran

esther:~ ciaran$ hostname
esther.local

私が言ったように、私はシェルスクリプトの経験がありませんが、私はまだ SSH の「内部」ではなく「内部」にいるために発生していると思います。ログイン後に期待を終了し、SSH セッションを引き渡す方法はありますか?

" send -- "\r" " の後に、'close' や 'exit' などのコマンドを試しました。ええ、彼らは私が望むことを行い、死ぬことを期待していますが、SSHセッションを執拗にダウンさせ、私が始めたところに戻ってきました. 私が本当に必要としているのは、その仕事をして終了することを期待して、手動で行ったかのように SSH セッションを手元に戻すことです。

すべての助けに感謝します、ありがとう。[1] これに名前があることは知っていますが、それが何であるかはわかりません。これは、句読点が無視されるため、ググることができない恐ろしいことの 1 つです。補足質問として、ここでの話は何ですか?

4

3 に答える 3

19

あなたの問題は以前にここで解決されたと思います:

expect を使用してパスワードを ssh に渡す

探しているコマンドはinteract. コントロールをあなた/あなたのキーボードに渡します。

于 2010-05-12T22:10:41.920 に答える
3

自動ログインに同様のスクリプトを使用しました。

「interact」を使用し、「expect eof」を削除しました。こうすることで、コマンドを手で入力できるように画面を戻すことができます。

expect "?assword: "
send -- "$password\r"
expect "$"
interact
于 2013-10-07T00:29:42.943 に答える
0

すべてをまとめると、ログインして、手動で入力した場合とまったく同じようにコマンドラインに残ります

#!/usr/bin/expect -f
set ip "127.001.001.001"
set password "xxyykkx"
spawn ssh $ip -l root
expect "?assword:"
send "$password\r"
interact
于 2016-03-24T10:52:25.527 に答える