
저는 Linux 스크립팅을 처음 접했습니다. 도와주세요. 아래에서 많이 검색했지만 적절한 답변을 찾지 못했습니다.
나중에 cronjob으로 예약하여 백엔드에서 계속 실행되고 결과를 test.txt 파일에 저장하는 스크립트를 만들려고 합니다.
스크립트의 주요 내용은 다음과 같습니다.
SSH를 통해 호스트에 연결한 다음 호스트에서 일부 명령을 실행하고 결과를 파일에 저장합니다. 스크립트가 호스트에 성공적으로 연결되었지만 호스트에서 자동으로 명령을 실행하지 않습니다. 스크립트는 다음과 같습니다.
#!/usr/bin/expect -f
spawn ssh aspen
expect "password: "
send "PASSWORD\r"
expect "$ "
send "/bin/sh /home/target/Script.sh >>test.txt"
expect "$ "
send "exit\r"
하지만 이 스크립트를 실행하면 전체 출력이 test.txt에 저장되지 않습니다. 두 번째로 이 출력 파일이 호스트 컴퓨터가 아닌 내 시스템에 있기를 원한다는 것입니다. 어떤 도움이라도 매우 중요합니다.
답변1
여기서는 여러 가지를 달성하려고 합니다.
- 사용자 상호 작용 없이 호스트에 연결
- 일부 스크립트를 실행하고 출력을 저장합니다.
1:
ssh-keygen
공개 키를 사용하여 SSH 키 쌍을 생성 하고 이를 호스트에 저장하는 것이 가장 좋습니다 . 비밀번호 없이 생성하면 ssh
연결할 때 비밀번호를 묻지 않습니다. 사용
client$ ssh -i <keyfile>
생성된 키를 사용하여 호스트에 연결합니다. 식별하려는 호스트에 공개 키를 추가하는 방법을 알아보려면 ssh(1) 및 sshd(8) 섹션 AUTHORIZED_KEYS FILE FORMAT도 참조하세요. 주로 다음과 같습니다.
host$ cat <keyfile>.pub >> ~/.ssh/authorized_keys
(이 작업은 호스트 컴퓨터에서 수행되어야 합니다!)
참고: 개인 키는 비밀번호와 동일합니다! cron 작업만 사용할 수 있도록 보안을 강화하세요. AUTHORIZED_KEYS 파일 형식에 대한 sshd(8) 섹션을 확인하세요. 생성된 키 쌍의 사용을 제한하여 스크립트만 실행할 수 있도록 하는 방법을 보여줍니다!
2:
ssh
I/O 리디렉션을 포함하여 셸 명령을 인수로 실행할 수 있습니다 . 예제를 실행 /home/target/Script.sh 2>&1
하고 출력을 저장하면 됩니다. 전체 명령은 다음과 같습니다.
client$ ssh -i <keyfile> user@host '/home/target/Script.sh 2>&1' >>test.txt
test.txt
자신의 컴퓨터에 상주하며 스크립트는 호스트 컴퓨터에서 실행됩니다.
참고: 이 스크립트는 출력을 표준 출력으로 지정합니다. 호스트에서는 특별한 처리가 필요하지 않습니다(표준 오류 출력도 캡처하는 "2>&1"을 리디렉션하는 것 제외).