LoginSignup
1
0

More than 1 year has passed since last update.

sshログイン自動化(コマンド対話例含む)

Posted at

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" の部分で、コンソール上の文字列を取得したときの条件文を記述し、
条件に合致したときは、その{}内の処理を実行します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0