다른 것을 기반으로우편 엽서대답은 다음과 같이 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
별 도움이 되지 않습니다(동일한 결과).
추신: 저는 스크립트를 보내지 않고 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
. 멈추지 않고 올바른 비밀번호를 설정하거나 올바르게 시작하지도 않습니다.