SSH経由で実行するときの予想停止防止

SSH経由で実行するときの予想停止防止

他に基づいて郵便はがき答えは、次のように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(予想される部分)、sleepsend -- \x03送信するためにCtrl+ C)など、私が考えることができるすべてを試しました。

絞首刑を防ぐ方法がわかりません。この特定のケースではどうすればよいですか?中断がexpect eof発生する可能性があると推測されますset timeout -1が、それを削除すると、少なくともセルフテストではスクリプトが正しく機能しません。

sshと組み合わせて使用​​することは-tあまり役に立ちません(同じ結果)。

PS:私はスクリプトを送信せず、可能であればscpheredocを使用してこのアプローチを好みます。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。停止せずに正しいパスワードを設定したり、正しく起動したりしません。

おすすめ記事