sshコマンドを実行する際にパスワード認証方式の場合、パスワードを要求されます。また、sudo、scp、rsyncコマンドでも同様にパスワードを要求されます。
そのようなコマンドを実行する際、パスワードをタイピングすることなく、自動で実行できたら素敵ですよね。
そうしたことを叶えてくれるコマンドであるexpectコマンドを紹介します。
リンク
expectコマンドとは
expectコマンドとは、コマンドの返答を認識し、入力をしてくれます。
もし、expectコマンドがインストールされていない場合は、次のコマンドを実行しましょう。
$ sudo apt install expect
構文
以下の構文をシェルスクリプトに書いて実行します。
expect -c "
spawn 実行するコマンド
expect コマンドの返答
send 次のコマンド
expect eof
exit"
具体例
rsyncコマンドの場合
#!/bin/bash
expect -c "
spawn rsync -av hogehoge.txt hoge@hogehoge:/home/hoge/
expect \"hoge@hogehoge's password:\"
send \"hogehoge\n\"
expect eof
exit"
sendの後、パスワードを入力しています。\n
は、改行コードです。
\
(バックスラッシュ)は、次の”
(ダブルクォーテーション)を文字として認識するために用いています。
expectの後、""
として、ダブルクォーテーションで囲まないとコマンドシェルと勘違いされてエラーになります。
sendの後の""
も同様です。
このシェルスクリプトを実行することでパスワードを入力することなくコマンドを実行できます。
まとめ
コマンドを実行する際、パスワードをタイピングすることなく、自動で実行することを叶えてくれるコマンドはexpectコマンドです。