셸 SSH 자동 로그 인
회 사 는 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.sh
의 shebang
는 #!/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 는 입문 이 짧 아서 남 의 자 제 를 잘못 쓰 지 못 합 니 다.평소에 자신 이 수첩 으로 한 필기 도 비교적 어 지 럽 고 체계 적 이지 못 하 다.
천천히 쌓 으 세 요. 적당 한 프로젝트 가 있 으 면 쓰 겠 습 니 다. 관심 가 져 주세요 ~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.