他に基づいて郵便はがき答えは、次のようにssh(この場合はオプションでchroot)を介してexpect
自動化できました。vncserver
ssh user@ip "rm ~/.vnc/passwd"
echo -n "`PASS_VNC`" | ssh user@ip "cat > PASS_VNC.file"
ssh user@ip << 'EOF'
export TERM=xterm
chroot /targetdir
PWD="$( cat PASS_VNC.file )"
/usr/bin/expect <<EOD
set timeout -1
spawn screen bash
send -- "/usr/bin/vncserver -geometry 1366x768 :1\r"
expect "Password:"
send -- "$PWD\r"
expect "Verify:"
send -- "$PWD\r"
expect "Would you like to enter a view-only password"
send -- "n\r"
expect eof
EOD
EOF
それ働く、どちらもパスワードを設定するために使用されました(PASS_VNC
リモートコンピュータのファイルに保存されている他の関数によって生成されます)+vncserver
正常に開始されました...問題は保留(スクリプトが完了すると予想されるとき)常にCtrl
+C
手動。
exit
私は予想されるスクリプト内で使用しているか、close
(予想される部分)、sleep
(send -- \x03
送信するためにCtrl
+ C
)など、私が考えることができるすべてを試しました。
絞首刑を防ぐ方法がわかりません。この特定のケースではどうすればよいですか?中断がexpect eof
発生する可能性があると推測されますset timeout -1
が、それを削除すると、少なくともセルフテストではスクリプトが正しく機能しません。
sshと組み合わせて使用することは-t
あまり役に立ちません(同じ結果)。
PS:私はスクリプトを送信せず、可能であればscp
heredocを使用してこのアプローチを好みます。ssh
答え1
いくつか試した後、動作するものを見つけました。
ssh user@ip "rm ~/.vnc/passwd"
echo -n "`PASS_VNC`" | ssh user@ip "cat > PASS_VNC.file"
ssh user@ip << 'EOF'
export TERM=xterm
chroot /targetdir
PWD="$( cat PASS_VNC.file )"
/usr/bin/expect <<EOD
set timeout -1
spawn screen bash
send -- "/usr/bin/vncserver -geometry 1366x768 :1\r"
expect "Password:"
send -- "$PWD\r"
expect "Verify:"
send -- "$PWD\r"
expect "Would you like to enter a view-only password"
send -- "n\r"
interact
EOD
EOF
expect eof
離職する方が良いと思いますinteract
。停止せずに正しいパスワードを設定したり、正しく起動したりしません。