リモートサーバー[authorized_keys ...]に問題があるため、expect
コマンドを使用してサーバーにSSHを介して接続するスクリプトをローカルコンピューターに作成してcd
実行します。git pull
しかし、私はこれを動作させることはできません:
#!/usr/bin/expect
spawn ssh USER@IP_ADDRESS
expect {
"USER@IP_ADDRESS's password:" {
send "PASSWORD\r"
}
"[USER@server ~]$" {
send "cd public_html"
}
}
interact
一部の文字をエスケープする必要がありますか?試してもcd
コマンドを無視します。
ベストアンサー1
[
TCLに固有のものであるため、"\[quotes]"
引用符を中括弧で渡すか置換することで適切な処理が必要です{[quotes]}
。より完全な例は次のとおりです。
#!/usr/bin/env expect
set prompt {\[USER@HOST[[:blank:]]+[^\]]+\]\$ }
spawn ssh USER@HOST
expect_before {
# TODO possibly with logging, or via `log_file` (see expect(1))
timeout { exit 1 }
eof { exit 1 }
}
# connect
expect {
# if get a prompt then public key auth probably logged us in
# so drop out of this block
-re $prompt {}
-ex "password:" {
send -- "Hunter2\r"
expect -re $prompt
}
# TODO handle other cases like fingerprint mismatch here...
}
# assuming the above got us to a prompt...
send -- "cd FIXMESOMEDIR\r"
expect {
# TWEAK error message may vary depending on shell (try
# both a not-exist dir and a chmod 000 dir)
-ex " cd: " { exit 1 }
-re $prompt {}
}
# assuming the above got us to a prompt and that the cd was
# properly checked for errors...
send -- "echo git pull FIXMEREMOVEDEBUGECHO\r"
expect -re $prompt
interact