SSH를 통해 키 입력을 기록하고 재생할 수 있습니다.

SSH를 통해 키 입력을 기록하고 재생할 수 있습니다.

오늘 저는 인벤토리 소프트웨어에 로그인하고, csv를 다운로드하고, cron 작업을 사용하여 주기적으로 웹 디렉토리에 넣을 수 있는 최소 서버용 작은 스크립트를 작성했습니다.

scriptreplay가 w3m을 사용하여 처음 로드한 실제 웹사이트가 아니라 실제로 터미널 출력을 재생한다는 사실을 깨달을 때까지는 script와 scriptreplay를 사용하여 이 모든 작업을 완벽하게 수행할 수 있었습니다.

그래서 원래 지침을 따르기 위해 SSH를 통해 키 입력을 기록하는 방법을 찾고 있습니다.

누구든지 어떤 아이디어가 있습니까? 실패하면 다른 옵션이 있는 사람이 있나요? 우리 서버는 Ubuntu의 미니 버전을 실행하고 있으므로 GUI가 없습니다.

답변1

그래서 많은 시행착오 끝에갈렙우리는 마침내 문제에 대한 해결책을 찾았습니다. 재고 관리 소프트웨어에 직접 로그인을 시도했는데 번거로웠지만 오늘 밤 주고받은 대화를 바탕으로 문제가 해결되었습니다. 키 입력을 전혀 기록할 필요가 없습니다. 그냥 좋은 노인 사용법.

스크립트의 첫 번째 연결은 로그인하고 쿠키에 세션을 생성하는 것입니다.

curl -s -c cookiejar.txt -b cookiejar.txt -L -d '[email protected]&pass=******' -e 'https://my.channelgrabber.com/login.php' https://my.channelgrabber.com/login.php -o /dev/null

다음으로 다른 페이지를 요청할 수 있지만 이전 페이지를 건너뛰어야 합니다. 예를 들어, 위의 후에 다음을 실행할 수 있습니다.

curl -s -c cookiejar.txt -b cookiejar.txt -L -e 'https://my.channelgrabber.com/index.php' https://my.channelgrabber.com/products.php -o products.html

이것은 내가 필요한 것을 정확히 수행합니다. 여기에서 쿠키를 사용한 후 삭제하고 필요한 것을 검색합니다.

rm -rf cookiejar.txt

...5분마다 실행되는 크론 작업으로 설정합니다. 전체 기능에 관해서는 몇 줄을 더 만들었지만 이것이 모든 것을 해결했습니다. 많은 시행착오를 겪었습니다. 다시 한번 정말 감사드립니다갈렙이 모든 일을 통해 나를 도와준 사람.

답변2

명령을 기록하고 재생하는 것은 이 문제를 해결하는 잘못된 방법입니다. 대신 작업을 처리하는 스크립트를 작성해야 합니다. 쉘 스크립트는 기본적으로 명령 목록일 뿐입니다. 마치 명령줄에서 이를 실행하기 위해 실행하는 것처럼 말입니다. 편집기에서 새 검정색 일반 텍스트 파일을 시작하고 첫 번째 줄에 실행하려는 셸을 입력합니다. 예를 들어, 다음과 같이 시작하는 것이 좋습니다.

#/usr/bin/env bash

이제 와 같은 이름으로 저장하세요 fetch_and_post_logs.bash. 이 위치는 찾을 수 있는 위치여야 하며 cron좋은 /usr/local/bin/선택일 수 있습니다.

다음으로 스크립트를 실행 가능하게 만듭니다.

$ chmod 755 /usr/local/bin/fetch_and_post_logs.bash

이제 이 스크립트를 좀 더 구체적으로 살펴보겠습니다. 이 부분에서는 몇 가지 지식을 직접 제공해야 하지만 먼저 원격 서버에서 로컬 폴더로 무언가를 복사한다고 가정해 보겠습니다.

#/usr/bin/env bash

timestamp=$(date +%Y-%m-%d)

scp user@remotehost:/path/to/logs.csv /path/to/www/logs-${timestamp}.csv

그런 다음 cron에서 이 스크립트를 실행합니다.

0 0 * * * /usr/local/bin/fetch_and_post_logs.bash

이제 시작해야 합니다. 도움이 더 필요하면 문제가 무엇인지 구체적으로 질문하세요.

이 기능이 작동하려면 cron비밀번호 없이 문제의 사용자로 로그인할 수 있어야 하므로 로그에 대한 제한된 액세스 권한만 가진 사용자를 설정한 다음 공개/개인 키 매개변수를 추가해야 합니다. 인증하다.

답변3

문제를 해결하는 더 좋은 방법이 있을 것이라는 다른 사람들의 의견에 동의합니다. 하지만 수행한 작업을 문서화하고 나중에 이를 사용하여 스크립트를 작성하면 몇 가지 이점을 볼 수 있습니다.

입력을 추적하려면 tee다음과 같이 입력을 파일로 전달할 수 있습니다.

tee logFile < /dev/stdin | bash

CTRL-를 사용하여 끌 수 있습니다 D.

답변4

컴퓨터가 명령을 기록하고 스크립트의 시작 부분을 작성하게 하세요. 이는 다음과 같은 경우에 유용합니다.TCL, 특히 expect.

$ autoexpect ssh somesystem
autoexpect started, file is script.exp
Last login: Mon Jan 23 15:14:04 2017 from 84-182-91-4.dyn.example.net
somesystem$ pwd
/home/jdoe
somesystem$ exit
logout
Connection to 192.0.2.42 closed.
autoexpect done, file is script.exp
$ cat script.exp
...

아니면 일반 스크립트도 쉽습니다.

#!/usr/bin/env expect
package require Tcl 8.5

set timestamp [clock format [clock seconds] -format "%Y-%m-%d"]

exec scp user@host:/in/log.csv /out/log-$timestamp.csv

spawn다음 자동화 와 상호 작용해야 합니까 ? 그것이 interact목적입니다. 비밀번호를 묻는 메시지를 표시하시겠습니까? 자동화하는 것은 그리 어렵지 않습니다 expect.

관련 정보