
이 설명을 위해서,기계내 노트북이고 원격 서버에 연결하는 데 사용합니다.서버 이름.
절차는 다음과 같이 설명할 수 있습니다.
- 서버에 연결해요서버 이름
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
한 다음서버 이름.
위의 작업을 수동으로 수행하는 것은 지루하고 시간이 많이 걸립니다. 그래서 위의 프로세스를 자동화하고 싶지만 세 가지 어려움이 있습니다.
- 연결되어 있는 동안서버 이름,
exit
쉘에서 명령을 실행하면 정상적으로 로그아웃되고 다음으로 돌아갑니다.기계. 그러나exit
스크립트.sh
파일 내에서 실행하면 스크립트가 종료됩니다... - 비밀번호를 자동화하려면 어떻게 해야 하나요?서버 이름단계? 비밀번호를 수동으로 입력하고 싶지는 않지만 스크립트를 통해 비밀번호를 입력하도록 하세요. 즉, 암호가 나에게 방해가 되지 않도록 어떻게든 스크립트에 암호를 하드코딩하고 싶습니다.
- "서버가 SSH 연결 준비를 기다리는 중" 단계: 이를 어떻게 자동화할 수 있나요? 즉, 응답을 받을 때까지 ing을 누른 다음 Ctrl+C를 눌러 중단하는 대신
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
서버의 공개 키 데이터도 필요하지 않습니다.