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(예상 부분), 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. 멈추지 않고 올바른 비밀번호를 설정하거나 올바르게 시작하지도 않습니다.

관련 정보