logo
Published on

パスワード省略できないサーバーにexpect経由で自動SSHする

Authors

Linuxパソコン・サーバーのコマンドラインやBash言語において、パスワード省略できないサーバーにexpect経由で自動SSHする方法について紹介します。

VPSとか自前のサーバーならいいんですが、エックスサーバーの場合、なんかSSHパスワードの省略が出来ない、のです。

expectでなんとかできたので紹介。


expecto(){

: usage: expecto [command] [password]
# e.g. expecto 'ssh -R 52698:localhost:52698 -p 10022 -i ~/.ssh/example.key example@sv7247.xserver.jp' "${PASSWORD}"

cat << EOT > ~/tmp/tmp && chmod 755 ~/tmp/tmp && ~/tmp/tmp && > ~/tmp/tmp
#!/usr/bin/expect -f
# exp_internal 1    ; # uncomment to turn on expect debugging
set timeout -1
spawn ${1}
expect {
    "passphrase" {
      send "${2}\n"
      interact
      exit 0
    }
    "password" {
      send "${2}\n"
      interact
      exit 0
    }
  }
EOT


}

直接SSHコマンドを書く場合

expecto 'ssh -R 52698:localhost:52698 -p 10022 -i ~/.ssh/yuis.key yuis@sv2031.xserver.jp' $XSERV_PASSWORD

aliasされたsshコマンドを使用する場合は展開しないといけない

alias xserv='ssh -R 52698:localhost:52698 -p 10022 -i ~/.ssh/yuis.key yuis@sv2031.xserver.jp'
expecto \"$(echo ${BASH_ALIASES[xserv]})\" $XSERV_PASSWORD

独自定義されたBashコマンドを用いる場合

expecto 'bash -ic "sharefile hoge.md"' $XSERV_PASSWORD