SSH 서버에 로그인하고 로그아웃하는 스크립트 작성

SSH 서버에 로그인하고 로그아웃하는 스크립트 작성

이 설명을 위해서,기계내 노트북이고 원격 서버에 연결하는 데 사용합니다.서버 이름.

절차는 다음과 같이 설명할 수 있습니다.

  1. 서버에 연결해요서버 이름ssh와 함께기계
  2. 그런 다음 다음에 대한 비밀번호를 삽입합니다.서버 이름
  3. 나는 뭔가를 컴파일한다서버 이름
  4. 나는 로그아웃한다서버 이름(사용 exit)
  5. 그런 다음 재부팅합니다서버 이름~에서기계
  6. ping 서버 이름그런 다음 응답을 받을 때까지 기다립니다( ping'의 출력이 콘솔에 표시됨).
  7. 나는 ssh안으로서버 이름다시
  8. 몇 가지 검사를 해요
  9. 마지막으로, 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한 다음서버 이름.

위의 작업을 수동으로 수행하는 것은 지루하고 시간이 많이 걸립니다. 그래서 위의 프로세스를 자동화하고 싶지만 세 가지 어려움이 있습니다.

  1. 연결되어 있는 동안서버 이름, exit쉘에서 명령을 실행하면 정상적으로 로그아웃되고 다음으로 돌아갑니다.기계. 그러나 exit스크립트 .sh파일 내에서 실행하면 스크립트가 종료됩니다...
  2. 비밀번호를 자동화하려면 어떻게 해야 하나요?서버 이름단계? 비밀번호를 수동으로 입력하고 싶지는 않지만 스크립트를 통해 비밀번호를 입력하도록 하세요. 즉, 암호가 나에게 방해가 되지 않도록 어떻게든 스크립트에 암호를 하드코딩하고 싶습니다.
  3. "서버가 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서버의 공개 키 데이터도 필요하지 않습니다.

관련 정보