1. ホーム
  2. linux

[解決済み] bashスクリプトによるtelnetセッションの自動化

2023-05-25 21:12:58

質問

私は、いくつかの telnet に関連するタスクを、Bash スクリプトを使用して自動化することに取り組んでいます。 いったん自動化されると、ユーザーは telnet (との対話はなくなります(つまり、完全に自動化されます)。

スクリプトは以下のようなものです。

# execute some commands on the local system
# access a remote system with an IP address: 10.1.1.1 (for example)

telnet 10.1.1.1

# execute some commands on the remote system
# log all the activity (in a file) on the Local system
# exit telnet
# continue on with executing the rest of the script.

ここで2つの問題に直面しています。

  1. スクリプトからリモート システム上でコマンドを実行する方法 (人間の介入なし)。

    私のいくつかのテストコードでの経験から、私は telnet 10.1.1.1 が実行されると、telnet は対話型セッションに入り、スクリプト内の後続のコード行はローカル システムで実行されることがわかりました。ローカル システムではなくリモート システムでコード行を実行するにはどうしたらよいでしょうか。

  2. のアクティビティのログファイルを取得することができません。 telnet セッションのアクティビティのログ ファイルをローカル システムで取得できません。私が使用した stdout リダイレクトは、リモート システム上にコピーを作成します (ログをローカル システムにコピーするためにコピー操作を実行したくありません)。どのように私はこの機能を達成することができますか?

どのように解決するのですか?

を書く。 expect スクリプトを書きます。

以下はその例です。

#!/usr/bin/expect

#If it all goes pear shaped the script will timeout after 20 seconds.
set timeout 20
#First argument is assigned to the variable name
set name [lindex $argv 0]
#Second argument is assigned to the variable user
set user [lindex $argv 1]
#Third argument is assigned to the variable password
set password [lindex $argv 2]
#This spawns the telnet program and connects it to the variable name
spawn telnet $name 
#The script expects login
expect "login:" 
#The script sends the user variable
send "$user "
#The script expects Password
expect "Password:"
#The script sends the password variable
send "$password "
#This hands control of the keyboard over to you (Nice expect feature!)
interact

実行するには

./myscript.expect name user password