対話処理を自動化したい(expect

#!/usr/bin/expect

spwan <コマンド>
expect "<プロンプト>"
send "<コマンドに送信する入力>\r"

expectで対話処理を自動化できます。

データベースのバックアップや、 リモートサーバーへ接続する時には、 パスワードを入力するためのプロンプトが表示されます。 そのような対話型プロンプトが表示される作業を spawn / expect / send で手順通りにならべることで、自動化できます。

注釈

パスワードなど秘匿すべき文字列は、環境変数と組み合わせるとよいです。

expectコマンドのPython実装であるpexpectパッケージと、dotenvxを組み合わせるとよいと思います。

SSH接続したい

#!/usr/bin/expect

# SSH接続を開始
spawn ssh ユーザー名@ホスト名or IPアドレス

# プロンプト表示を待つ
expect "password:"

# パスワードを送信
send "パスワード\r"

# ログインを確認
expect "$"

# コマンドを実行(ls)
send "ls\r"

# セッションを終了
send "exit\r"
expect eof

データベースをダンプしたい

#!/usr/bin/expect

# 変数
set db_user "ユーザー名"
set db_user_password "パスワード"
set db_name "データベース名"
set output_filename "バックアップ/ファイル名.sql"

# mysqldumpコマンドを実行
spawn mysqldump -u $user -p $db_name > $output_filename

# プロンプト待機
expect "Enter password:"

# パスワードを送信
send "$db_user_password\r"

# コマンドの実行を待つ
expect eof