셸 SSH 자동 로그 인

5881 단어
머리말
회 사 는 docker 를 개발 하여 자신의 개발 기 에 로그 인 할 때마다 입력 ssh user_name@ip_string 을 한 다음 에 입력 password 을 확인 해 야 한다. 손 이 빠 르 면 잘못 지 는 경우 도 많다.게으름뱅이 로 서 교묘 한 방법 을 찾 아 ssh 명령 을 살 펴 보 았 습 니 다. 서버 와 암호 화 된 상호작용 을 해 야 하기 때문에 비밀 번 호 를 직접 추가 하여 로그 인 하 는 옵션 이 없어 서 그만 둘 수 밖 에 없 었 습 니 다.
며칠 전 동료 들 이 기술 공 유 를 하 던 중 명령 한 줄 ./test.sh 만 입력 하고 개발 기 에 성공 한 것 을 보고 놀 라 서 돌아 와 검색 연 구 를 해 보 니 이 글 이 됐다.
셸 스 크 립 트 기초
ssh 자동 로그 인 스 크 립 트 를 작성 하기 전에 셸 스 크 립 트 의 기 초 를 말씀 드 리 겠 습 니 다. 이 기 초 는 문법 이 아 닙 니 다. 인터넷 곳곳에 있 습 니 다. 셸 스 크 립 트 의 운영 체 제 를 정리 하 였 습 니 다 ~
셸 스 크 립 트 실행 방식
먼저 셸 의 몇 가지 시작 방식 을 말 해 야 합 니 다. 바로 스 크 립 트 가 시 작 된 구 덩이 를 밟 아서 원래 10 분 만 에 해 결 된 스 크 립 트 를 사용 하고 두 시간 이 걸 려 서 해 결 했 습 니 다.동시에 우리 로 하여 금 셸 을 실행 하 게 하여 그 이 유 를 알 게 한다.
파일 이름 으로 실행
셸 스 크 립 트 는 파일 이름 을 통 해 직접 실행 할 수 있 습 니 다. 주의해 야 할 것 은 파일 실행 권한 입 니 다.sudo chmod +x ./file_name.sh 을 통 해 파일 에 실행 권한 을 추가 합 니 다.
파일 을 실행 할 스 크 립 트 해석 기 를 지정 합 니 다.
우리 가 자주 사용 하 는 sh file_name.sh 은 스 크 립 트 해석 기 /bin/sh 를 지정 하여 실행 스 크 립 트 를 설명 하 는 것 입 니 다.일반적인 스 크 립 트 해석 기 는 다음 과 같 습 니 다. /bin/bash 등 현재 사용 가능 한 스 크 립 트 해석 기 를 보기 위해 ls -l /bin/*sh 명령 을 사용 할 수 있 습 니 다.
사용../filename 또는 source 명령 실행 스 크 립 트
이 방식 은 앞의 두 가지 방식 처럼 fork 키 프로 세 스 가 스 크 립 트 를 실행 하지 않 고 현재 셸 환경 을 사용 하여 실 행 됩 니 다. bashrc 또는. bashprofile 이 수정 되 었 을 때, 우 리 는 셸 을 다시 시작 하거나 시스템 에 다시 로그 인하 지 않 아 도 현재 의 변경 사항 을 적용 할 수 있 습 니 다.
shebang
우 리 는 셸 스 크 립 트 를 쓸 때 항상 맨 앞 에 한 줄 #!/binbash 을 추가 하 는 습관 이 있 습 니 다. 그것 이 바로 스 크 립 트 shebang 입 니 다. 왜 이런 이상 한 이름 을 부 르 는 지 에 대해 C 언어 와 유 닉 스 의 개발 자 데 니스 리 치 는 이 를 "hash-bang" 라 고 부 릅 니 다.
위 키 의 설명 을 붙 입 니 다.
컴퓨터 과학 에서 Shebang 은 우물 번호 와 느낌표 로 구 성 된 문자 직렬 로 텍스트 파일 의 첫 줄 앞 두 글자 에 나타난다.파일 에 Shebang 이 존재 하 는 경우 유 닉 스 운영 체제 의 프로그램 불 러 오기 기 는 Shebang 후의 내용 을 분석 하고 이 내용 을 해석 기 명령 으로 호출 하 며 Shebang 이 불 러 온 파일 경 로 를 이 해석 기의 매개 변수 로 합 니 다.
쉽게 말 하면 이 스 크 립 트 가 실 행 될 때의 해석 기 를 표시 하기 때문에 파일 이름 으로 셸 스 크 립 트 를 직접 실행 할 때 shebang 을 가 져 가 야 합 니 다.또한, 우 리 는 shebang 뒤에 옵션 을 직접 추가 할 수 있 습 니 다. 실행 할 때 우 리 는 기본적으로 옵션 을 사용 하여 실행 합 니 다.
예 를 들 어 test.shshebang#!/bin/sh -x 이 고 우리 가 스 크 립 트 를 실행 할 때:./test.sh hello
해당:bin/sh -x ./test.sh hello ;
ssh 자동 로그 인 스 크 립 트 를 작성 할 때 필요 한 shebang (해석 기) 은 /usr/bin/expect 입 니 다.
주의해 야 할 것 은: 스 크 립 트 해석 기 를 지정 하여 스 크 립 트 를 실행 할 때 shebang 은 지정 한 스 크 립 트 해석 기 를 덮어 씁 니 다. 즉, 지정 한 스 크 립 트 해석 기 를 우선 사용 하여 스 크 립 트 를 실행 합 니 다 (습관 적 으로 sh./test. sh 로 command not found 를 알려 줍 니 다)
expect 해석 기
expect 는 자동 적 이 고 상호작용 적 인 작업 을 실현 할 수 있 는 해석 기 입 니 다. 흔히 볼 수 있 는 셸 문법 명령 도 설명 할 수 있 습 니 다. 그 특징 은 다음 과 같은 몇 가지 명령 입 니 다.
spawn 명령:spawn command 명령 은 하위 프로 세 스 가 command 명령 을 실행 하고 이 하위 프로 세 스에 서 다음 명령 을 수행 합 니 다.
ssh 자동 로그 인 스 크 립 트 에서 저 희 는 spawn ssh user_name@ip_str 를 사용 하여 fork 키 프로 세 스 가 ssh 로그 인 명령 을 수행 합 니 다.
expect 명령:
expect 명령 은 expect 해석 기의 관건 적 인 명령 입 니 다. 일반적인 용법 은 expect "string" 입 니 다. 즉, string 문자열 을 가 져 오 기 를 원 하 는 것 입 니 다. string 문자열 에서 * 등 어댑터 를 사용 할 수 있 습 니 다.
string 이 명령 행 에서 돌아 오 는 정보 와 일치 하면 expect 는 즉시 스 크 립 트 를 아래로 실행 합 니 다.
set timeout 명령:set timeout n 명령 은 expect 명령 의 대기 시간 초과 시간 을 n 초 로 설정 합 니 다. n 초 동안 원 하 는 명령 을 얻 지 못 했 습 니 다. expect 는 false 이 고 스 크 립 트 는 계속 아래로 실 행 됩 니 다.
send 명령:
send 명령 의 일반적인 용법 은 send "string" 입 니 다. 그들 은 우리 가 평소에 명령 을 입력 하 는 것 처럼 명령 행 에 정 보 를 입력 합 니 다. 물론 string 뒤에 \r 를 추가 하 는 것 을 잊 지 마 세 요.
interact 명령:
interact 명령 은 간단 합 니 다. 이 명령 을 실행 할 때 스 크 립 트 fork 의 하위 프로 세 스 는 사용자 에 게 작업 권 을 주 고 현재 셸 과 대화 할 수 있 도록 합 니 다.
스 크 립 트 완성
다음은 완 성 된 스 크 립 트 test.sh 입 니 다.
#!/usr/bin/expect                   //   shebang

set timeout 3                       //        3 
spawn ssh user_name@172.***.***.*** // fork       ssh  
expect "*password*"                 //       'user_name@ip_string's password:' 
send "my_password\r"                //            
send "sudo -s\r" 
send "cd /data/logs\r"              //             
interact                            //           
sudo chmod +x ./test.sh 명령 을 실행 하여 셸 스 크 립 트 에 실행 권한 을 추가 합 니 다../test.sh 명령 을 실행, 원 클릭 로그 인 성공!
간단 한 몇 가지 명령 을 조합 하여 명령 행 과 의 상호작용 문 제 를 해결 한 후에 복잡 한 기능 도 많 습 니 다 ~
별명
스 크 립 트 가 완성 되 었 지만 작은 흠 이 있 습 니 다.
  • 입력 ./file_name.sh 명령 이 너무 길 어...
  • 스 크 립 트 디 렉 터 리 에서 만 실행 할 수 있 습 니 다. 그렇지 않 으 면 절대 경 로 를 사용 하여 출력 하 는 명령 이 더 깁 니 다.

  • 여기 서 우 리 는 Liux 의 alias 명령 을 생각 했다.
    alias 명령:
    alias 명령 사용 방식 alias alias_name="ori_command", aliasname 을 ori 로 설정command 의 별명, 이렇게 해서 우 리 는 alias 를 입력 합 니 다.name, ori 를 실행 한 셈 입 니 다.command;
    그러나, 우 리 는 당신 이 현재 셸 을 닫 은 후에 셸 창 을 하나 더 열 고 alias 를 사용 하 는 것 을 발견 할 것 입 니 다.name, 시스템 알림 command not found;
    명령 을 유지 할 수 있 는 방법 이 있 습 니까?편집 bashprofile 파일.
    bash_프로필 파일
    우리 편집 bashprofile 파일, 이 파일 은 터미널 창 을 만 들 때 먼저 실행 되 기 때문에 별명 을 다시 설정 할 수 있 습 니 다.
    명령 실행 vim ~./bash_profile, 파일 내부 에 추가:alias alias_name="/root_dir/../file_name.sh
    저장 후 . ~./bash_profile 또는 source ~./bash_profile 현재 스 크 립 트 에서 별명 명령 을 한 번 실행 하고 설정 을 완료 합 니 다.
    이렇게 해서 우 리 는 어느 디 렉 터 리 에 있 든 alias_name 명령 을 입력 하고 차 로 돌아 가 진정한 원 키 로 로그 인하 면 됩 니 다!
    총결산
    프로그래머 로 서 항상 의식 을 유지 하고 있 습 니 다.
    한 달 넘 게 블 로 그 를 쓰 지 않 았 습 니 다. 최근 에 APUE, UNP 한 세트의 책 을 보고 있 습 니 다. C 와 Unix 는 입문 이 짧 아서 남 의 자 제 를 잘못 쓰 지 못 합 니 다.평소에 자신 이 수첩 으로 한 필기 도 비교적 어 지 럽 고 체계 적 이지 못 하 다.
    천천히 쌓 으 세 요. 적당 한 프로젝트 가 있 으 면 쓰 겠 습 니 다. 관심 가 져 주세요 ~

    좋은 웹페이지 즐겨찾기