- Published on
パスワード省略できないサーバーにexpect経由で自動SSHする
- Authors
- Name
- Shou Arisaka / 有坂翔
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