そこで、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 つです。補足質問として、ここでの話は何ですか?