sshログイン自動化方法
自身のホスト環境とビルド環境、実行環境が違う場合が、
実務の開発時にはあると思います。そんな時のログイン自動化メモです。
前提環境
- Windows10 (WSL2)
- 普通のLinuxでもたぶん大丈夫なはず。
コマンド対話が不要な場合
sshpassを使います。まずは以下でインストールします。
$ sudo apt install sshpass
ログイン+ログイン先での処理は以下のように実施します。
USERNAME="AAAAAA"
PASSWORD="XXXXXX"
SERVER_URL="192.168.1.10"
WORK_DIR="~"
sshpass -p ${PASSWORD} ssh ${USERNAME}@${SERVER_URL} \
"\
cd ${WORK_DIR};\
ls\
"
上記のように、sshpass+sshの後にエスケープを使って複数行記述すれば、
任意のコマンドをサーバー上で実行させられます。
コマンド対話が必要な場合
例えば、初回sshログイン時は、コマンド対話が必要であるため、完全に自動化できません。
そこで、expectを使えば初回ログインなどのコマンド対話も自動化となります。
まずは、expectをインストールします。
$ sudo apt install expect
以下を任意の.expファイルとして保存し(例: test.exp
)、
expect test.exp {サーバーURL} {パスワード} {ワークフォルダ}
で実行します。
log_file /var/log/expect.log
set ServerUrl [lindex $argv 0]
set Password [lindex $argv 1]
set WorkDir [lindex $argv 2]
set Prompt "\[#$%>\]"
set timeout 5
spawn env LANG=C /usr/bin/ssh ${ServerUrl}
expect {
-glob "(yes/no)?" {
send "yes\n"
exp_continue
}
-glob "password:" {
send -- "${Password}\n"
}
}
expect {
-glob "${Prompt}" {
send "cd ${WorkDir}\n"
send "ls\n"
interact
exit 0
}
}
-glob "hogehoge"
の部分で、コンソール上の文字列を取得したときの条件文を記述し、
条件に合致したときは、その{}
内の処理を実行します。