이 설명을 위해,기계내 노트북이고 원격 서버에 연결하는 데 사용합니다. 전화하겠습니다.서버 이름.
프로세스는 다음과 같이 설명될 수 있습니다.
- 서버에 접속해요서버 이름
ssh
와 함께기계 - 그런 다음 비밀번호를 입력합니다.서버 이름
- 뭔가 정리했는데서버 이름
- 나는 그만 두었다서버 이름(사용
exit
) - 그런 다음 재부팅합니다.서버 이름~에서기계
- 나
ping
서버 이름그런 다음 응답을 받을 때까지 기다립니다(ping
그 출력은 콘솔에 표시됨). - 나는
ssh
들어간다서버 이름다시 - 몇 가지 확인을 했어요
- 마지막으로, 나는
exit
원한다서버 이름돌아오기 위해기계
위의 레시피를 완성하려면수동다음 명령을 실행하십시오.기계:
<machine>$ ssh server_name
insert password for server_name:
<server_name>$ cd /some/path/
<server_name>$ make clean > /dev/null
<server_name>$ make > /dev/null
<server_name>$ exit
<machine>$ ./my_reboot_script server_name
<machine>$ ping server_name
PING 10.23.22.7 with 56(84) bytes of data.
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
^C
<machine>$ ssh server_name
insert password for server_name:
<server_name>$ ./run_some_checks
<server_name>$ exit
<machine>$ echo "Done!"
위의 몇 가지 참고 사항은 다음과 같습니다.
- my_reboot_script
콜드 재부팅을 허용하는 프로그램서버 이름내 자리에서 바라본 모습.
- 콜드 재시작 후서버 이름, 을 사용하여 다시 연결할 수 있도록 복구될 때까지 기다려야 합니다 ssh
. 이를 위해 나는 다음 ping
과 같은 경우에만 표시로 사용됩니다.서버 이름ping
연결을 다시 수락할 준비를 하십시오. 콘솔에 최종적으로 생성된 출력이 표시될 때만 Ctrl+C를 눌러 중단하고 ssh
Enter를 누르십시오.서버 이름.
위의 작업을 수동으로 수행하는 것은 지루하고 시간이 많이 걸립니다. 그래서 위의 프로세스를 자동화하고 싶지만 세 가지 어려움이 있습니다.
- 연결될 때서버 이름
exit
, 쉘에서 명령을 실행하면 정상적으로 로그아웃되고 다음으로 돌아갑니다.기계. 그러나 스크립트 파일 내exit
에서 실행하면 스크립트가 종료됩니다....sh
- 비밀번호를 자동으로 입력하려면 어떻게 해야 하나요?서버 이름단계? 비밀번호를 수동으로 입력하고 싶지 않고 스크립트가 입력하도록 합니다. 즉, 비밀번호가 방해받지 않도록 어떻게든 스크립트에 비밀번호를 하드코딩하고 싶습니다.
- "서버가 SSH 연결을 위해 준비될 때까지 기다리는 중" 단계: 이를 자동화하는 방법은 무엇입니까? 즉,
ping
스크립트ping
에서 요청이 있음을 인식하고 싶습니다.서버 이름을 선택한 다음 연결하세요ssh
. 하지만ping
응답이ping
보장되지 않기 때문에 여기에서 사용하는 것은 아마도 좋은 생각이 아닐 것입니다.서버 이름연결을 들을 준비가 되었습니다(위 프로세스에 대한 내 경험에 따르면ssh
첫 번째 응답을 받은 후 몇 초가 걸립니다).ping
따라서 더 나은 접근 방식은 액세스가 허용될 때까지 스크립트가ssh
루프에서 계속 시도하도록 하는 것입니다(일종의 바쁜 대기 메커니즘 또는 연결을 시도하기 위해 몇 초마다 잠자고 깨어나는 루프).
답변1
컴퓨터에서 서버 .ssh/authorized_key
의 파일 로 공개 키 데이터를 가져올 수 있는 경우 ssh
비밀번호를 입력하지 않고도 서버당 한 번의 호출로 컴파일을 실행할 수 있습니다.
ssh someone@$SERVER 'cd /some/path/; make clean > /dev/null; make > /dev/null;'
SERVER
이를 쉘 스크립트의 루프에 넣어 매번 쉘 변수의 값을 변경할 수 있습니다. 전화할 때마다 비밀번호를 입력해도 괜찮다면 ssh
서버의 공개 키 데이터도 필요하지 않습니다.