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를 눌러 중단하고 sshEnter를 누르십시오.서버 이름.

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

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

관련 정보