プログラミング

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

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

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


expecto(){ : usage: expecto [command] [password] # e.g. expecto 'ssh -R 52698:localhost:52698 -p 10022 -i ~/.ssh/shit.key shit@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