SSH 키 검증 을 통 해 현재 시스템 간 스 크 립 트 자동화

SSH 안내
일상적인 업무 에서 우 리 는 SSH (Secure Shell) 클 라 이언 트 소프트웨어 를 사용 하여 네트워크 를 통 해 SSH 서 비 스 를 여 는 원 격 시스템 에 로그 인하 고 원 격 시스템 에서 작업 을 수행 하 는 경우 가 점점 많아 지고 있다.전통 적 인 네트워크 액세스 서비스 (예 를 들 어 telnet, rlogin, ftp) 와 달리 암호 화 된 데 이 터 를 명문 으로 전송 하고 SSH 는 전 송 된 데 이 터 를 네트워크 에 암호 화하 여 안전 한 통신 을 한다.
SSH 는 암호 기반 및 키 기반 보안 검증 RSA/DSA 를 포함 한 다양한 보안 검증 방식 을 제공 합 니 다.
일반적으로 우 리 는 암 호 를 기반 으로 하 는 안전 인증 을 사용 하고 원 격 시스템 의 계 정과 암 호 를 입력 하여 원 격 시스템 과 연결 합 니 다.예 를 들 어 SSH 명령 을 사용 하고 '계 정 @ 호스트 명령' 을 매개 변수 로 원 격 시스템 에 로그 인하 여 명령 을 실행 하고 결 과 를 되 돌려 줍 니 다.실행 과정 에서 SSH 는 원 격 시스템 에 있 는 사용자 의 비밀 번 호 를 입력 하도록 요구 했다.아래 에서 보 여 준 것 처럼,
 
				
 [linuxStar@remoteLinuxHost ~]# ssh winStar@remoteWinHost "pwd 
 winStar@remoteWinHost's password: <       winStar@remoteWinHost     > 
 /home/winStar <"pwd"    winStar@remoteWinHost        > 
     

 
그러나 일부 스 크 립 트 에서 SSH 명령 을 호출 하여 원 격 시스템 과 연결 해 야 할 때 암호 입력 은 스 크 립 트 자동화 의 장애 가 되 었 다.이 때 스 크 립 트 는 멈 춰 서서 비밀번호 입력 을 기다 리 며 계속 실행 할 수 없습니다.사용 자 는 컴퓨터 앞에서 원 격 시스템 에 연결 하기 위해 비밀 번 호 를 입력 해 야 한다.그러면 어떻게 해야만 한 호스트 에서 다른 원 격 시스템 에 연결 해 야 할 때 비밀 번 호 를 입력 하지 않 고 로그 인 할 수 있 습 니까?
SSH 는 키 기반 보안 인증 을 제공 합 니 다.우 리 는 SSH 의 이러한 안전 인증 방식 을 사용 하여 암호 가 없 는 원 격 시스템 과 연결 할 수 있다.키 쌍 생 성 을 통 해 SSH 서 비 스 를 여 는 다른 시스템 의 특정 사용자 의 신뢰 목록 에 공개 키 를 추가 합 니 다 (RSA 는 ~/. ssh/authorized keys 파일, DSA 는 ~/. ssh/authorized keys 2 파일). 원 격 시스템 의 계 정 비밀 번 호 를 입력 하지 않 고 원 격 시스템 과 연결 할 수 있 습 니 다.구체 적 인 배치 방법 은 아래 장 에서 언급 될 것 이다.
실험 환경
이 예 에서 우 리 는 OpenSSH 소프트웨어 를 사용 하여 SSH 를 실현 한다.OpenSSH (Open Secure Shell) 는 오픈 소스 소프트웨어 다.실제로 우 리 는 다양한 버 전의 윈도 우즈/Linux/AIX/Solaris/HPUX 운영 체제 에 OpenSSH 를 설치 하고 키 기반 보안 검증 을 설정 하 며 모든 호스트 를 연결 해 야 하 는 작업 을 자동화 하 는 스 크 립 트 를 실 현 했 습 니 다. 이 스 크 립 트 들 은 현재 사용 되 고 있 으 며 매일 여러 번 실 행 됩 니 다.
다음 장 에 서 는 Linux 호스트 한 대 와 Windows 호스트 한 대 를 예 로 들 어 SSH 키 기반 보안 검증 과 시스템 간 스 크 립 트 자동 화 를 어떻게 실현 하 는 지 설명 합 니 다.본 논문 의 방법 은 Windows 와 Unix, Linux 와 Linux, Linux 와 Unix 등 SSH 가 설 치 된 다른 시스템 간 의 통신 에 도 적용 된다.
표 1. Linux 원 격 시스템 실험 환경
Linux 운영 체제 환경
OpenSSH 버 전
호스트 이름/사용자
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
openssh(4.3p2-29.el5)
remoteLinuxHost/linuxStar
표 2. Windows 원 격 시스템 실험 환경
Windows 운영 체제 환경
OpenSSH 버 전
호스트 이름/사용자
Windows 2000 Service Pack 4
openssh(5.1p1-10)
remoteWinHost/winStar
실험 단계 1 윈도 시스템 에 OpenSSH 설정 설치
Cygwin 과 OpenSSH 설치
윈도 에 OpenSSH 를 설치 하려 면 먼저 Cygwin 소프트웨어 를 설치 해 야 한다.Cygwin 은 윈도 운영 체제 에서 리 눅 스 환경 을 모 의 하 는 소프트웨어 다.Cygwin 의 국내 미 러 Cygwin. cn 방문 (http://www.cygwin.cn/site/install/) 상세 한 Cygwin 설치 안내 서 를 조회 하고 Cygwin 소프트웨어 를 다운로드 할 수 있 습 니 다.
Cygwin 소프트웨어 를 설치 하 는 과정 에서 두 가지 옵션 을 주의해 야 합 니 다.
'기본 텍스트 파일 형식' 에 대한 설치 옵션
설치 과정 에서 "Default text file type"을 선택 하 십시오.Cygwin 은 유 닉 스/binary (Cygwin 추천) 와 DOS/Text 두 가지 옵션 을 제공 합 니 다.실행 중인 스 크 립 트 가 도스 형식의 CMD 나 BAT 스 크 립 트 라면 '도스/Text' 옵션 을 선택 하 는 것 을 권장 합 니 다.
Cygwin 을 설치 하면 mount 명령 을 사용 하여 기본 텍스트 파일 형식 을 조회 할 수 있 습 니 다.
 
				
 Administrator@remoteWinHost ~ 
 $ mount 
 C:\cygwin\bin on /usr/bin type system (textmode) 
     

 
이 옵션 을 변경 하려 면 Cygwin 을 다시 설치 하고 설치 과정 에서 'Default text file type' 을 정확하게 선택해 야 합 니 다.
"설치 패키지 선택"에 대한 설치 옵션
패키지 패 널 을 선택 하고 ALL -> Net category -> openssh (5.1p1 - 10) 를 선택 하 십시오. 관련 패키지 openssl (0.9.81 - 1), libopenldap, libwrap 이 자동 으로 선 택 됩 니 다.
CYGWIN sshd 서비스 설정
Cygwin 소프트웨어 를 설치 한 후 다음 절 차 를 통 해 SSH 서 비 스 를 설정 합 니 다.
환경 변수 CYGWIN = ntsec tty 를 추가 합 니 다.
Administrator 계 정 으로 Cygwin 에서 ssh - host - config 를 실행 하고 CYGWIN sshd 를 운영 체제 서비스 로 설정 합 니 다.
 
				
 Administrator@remoteWinHost ~ 
 $ ssh-host-config -y 
 <    > 
 *** Warning: The following functions require administrator privileges! 

 *** Query: Do you want to install sshd as a service? 
 *** Query: (Say "no" if it is already installed as a service) (yes/no) yes 
 *** Info: Note that the CYGWIN variable must contain at least "ntsec"
 *** Info: for sshd to be able to change user context without password. 
 *** Query: Enter the value of CYGWIN for the daemon: [ntsec] ntsec tty 

 *** Info: The sshd service has been installed under the LocalSystem 
 *** Info: account (also known as SYSTEM). To start the service now, call 
 *** Info: `net start sshd' or `cygrunsrv -S sshd'.  Otherwise, it 
 *** Info: will start automatically after the next reboot. 

 *** Info: Host configuration finished. Have fun! 
     

 
명령 이 실 행 된 후 시작 메뉴 를 열 고 명령 services. msc 를 실행 하면 로 컬 서비스 에서 CYGWIN sshd 가 추가 되 었 음 을 볼 수 있 습 니 다.
CYGWIN sshd 서비스 설정 이 완료 되면 net start 명령 으로 sshd 서 비 스 를 시작 합 니 다.
 
				
 Administrator@remoteWinHost ~ 
 $ net start sshd 
 --------The CYGWIN sshd service is starting. 
 --------The CYGWIN sshd service was started successfully. 
     

 
CYGWIN sshd 서 비 스 는 윈도 시스템 에 성공 적 으로 설치 되 었 다.로 컬 서비스 에 CYGWIN sshd 가 추가 되 기 때문에 기 계 를 다시 시작 할 때마다 CYGWIN sshd 서비스 가 자동 으로 시 작 됩 니 다.
Cygwin 계 정 추가
안전 을 고려 하여 저 희 는 특정한 계 정 을 만들어 특정한 임 무 를 수행 합 니 다.이 예 에서 저 희 는 계 정 winStar 를 만 들 고 싶 습 니 다. 다른 계 정 을 만 들 려 면 절차 가 같 습 니 다.
우선 windows 시스템 계 정 winStar 를 만 듭 니 다.
그리고 Cygwin 에서 mkpasswd 명령 을 사용 하여 winStar 계 정 을 Cygwin 의 계 정 암호 파일/etc/passwd 에 가 져 옵 니 다.
 
				
 Administrator@remoteWinHost ~/.ssh 
 $ mkpasswd -l -u winStar >> /etc/passwd 
     

 
passwd winStar 명령 을 사용 하여 이 Cygwin 계 정 에 비밀 번 호 를 설정 합 니 다.
Cygwin 에 서 는 su - winStar 를 사용 하여 winStar 계 정 으로 전환 할 수 없습니다.나 는 Cygwin 사 이 트 를 찾 아 보 았 는데, Cygwin 은 ssh 를 사용 하 는 것 을 건의 했다.winStar@remoteWinHost수 명령 대신
실험 단계 2 리 눅 스 시스템 에 OpenSSH 설정 설치
OpenSSH 는 윈도 우즈 보다 리 눅 스 운영 체제 에 설치 가 훨씬 간단 하 다.새로운 버 전의 Linux 시스템 은 시스템 을 설치 할 때 자동 으로 OpenSSH 를 설치 하고 sshd 서 비 스 를 켜 기 자동 으로 시작 하도록 설정 합 니 다.
ps 명령 을 사용 하여 sshd 가 열 렸 는 지 확인 합 니 다:
 
				
 # ps -ef | grep sshd 
 root      2666     1  0 Feb20 ?        00:00:00 /usr/sbin/sshd 
     

 
ssh - ver 명령 으로 SSH 버 전 검사:
 
				
 # ssh -ver 
 OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008      
     

 
시스템 에 OpenSSH 가 설치 되 어 있 지 않 은 것 을 발견 하면 스스로 OpenSSH 를 설치 해 야 한다.OpenSSH 홈 페이지 에서 최신 소스 패 키 지 를 다운로드 하 는 것 을 권장 합 니 다. OpenSSH 홈 페이지 는?http://www.openssh.com/.설명 에 따라 "make", "make install"명령 을 사용 하여 OpenSSH 를 컴 파일 하고 설치 합 니 다.그리고 sshd 서 비 스 를 시작 합 니 다.
 
				
 # service sshd start 

 
실험 단계 3 키 인증 설정
Linux 에서 원 격 Windows 시스템 까지 암호 없 는 로그 인 을 위해 아래 절차 에 따라 RSA 키 인증 을 설정 합 니 다.
먼저 Linux 시스템 에 로그 인하 여 설정 할 계 정 으로 전환 하고 ssh - keygen 명령 을 실행 하여 RSA 키 를 생 성 합 니 다.
전용 키 파일 을 입력 하 라 고 요구 할 때 바로 차 로 돌아 가 부족 한 설정 을 받 습 니 다 ~/. ssh/idrsa.
비밀번호 구 passphrase 를 입력 하 는 것 을 알려 줄 때, 바로 차 로 돌아 가 빈 암호 구 를 사용 합 니 다.이렇게 하면 암호 구 를 입력 하지 않 고 직접 로그 인 하 는 목적 을 실현 할 수 있 으 나 전용 암호 파일 은 암호 보 호 를 잃 었 다.전용 암호 파일linuxStar@remoteLinuxHost신분증 과 마찬가지 로 조심해 서 보호해 야 합 니 다.도용 당 하면linuxStar@remoteLinuxHost원 격 시스템 에 직접 로그 인 합 니 다.
 
				
 [linuxStar@remoteLinuxHost ~]$ ssh-keygen -t rsa 
 Generating public/private rsa key pair. 
 Enter file in which to save the key (/home/linuxStar/.ssh/id_rsa): 
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /home/linuxStar/.ssh/id_rsa. 
 Your public key has been saved in /home/linuxStar/.ssh/id_rsa.pub. 
 The key fingerprint is: 
 c3:12:75:21:2b:32:78:8b:ec:1f:30:71:20:20:e2:6f 
 [email protected]      
     

 
명령 실행 성공 후 전용 키 파일 생 성 ~/. ssh/idrsa 와 공개 키 파일 ~/. ssh/idrsa.pub.
생 성 된 공개 키 내용 을 원 격 시스템 특정 사용자 의 SSH 설정 디 렉 터 리 authorized 로 복사 합 니 다.keys 파일 중.여기 서 우 리 는 그것 을 복사 했다.winStar@remoteWinHost:~/.ssh/authorized_keys 파일 중.RSA 인증 이 아직 완전히 설정 되 지 않 았 기 때문에 SSH 는 winStar 가 reoteWinHost 에 있 는 비밀 번 호 를 입력 하 라 고 알려 주 었 다.
ssh - copy - id 명령 사용
 
				
 [linuxStar@remoteLinuxHost .ssh]$ ssh-copy-id -i id_rsa.pub winStar@remoteWinHost 
 winStar@remoteWinHost's password: 
 Now try logging into the machine, with "ssh 'winStar@remoteWinHost'", and check in: 

  .ssh/authorized_keys 

 to make sure we haven't added extra keys that you weren't expecting. 
     

 
ssh - copy - id 명령 을 찾 지 못 하면 원 격 시스템 에 authorized 가 없습니다.keys 의 경우 scp 명령 을 직접 사용 할 수 있 습 니 다.
 
				
 [linuxStar@remoteLinuxHost .ssh]$ 
 scp id_rsa.pub winStar@remoteWinHost:~/.ssh/authorized_keys 
 --------winStar@remoteWinHost's password: 
 --------id_rsa.pub  --------   100%  408     0.4KB/s   00:00       
     

 
복사 완료 후 원 격 시스템 에서 authorized 확보keys 파일 의 읽 기 실행 가능.
 
				
 [winStar@remoteWinHost .ssh] chmod 644 ~/.ssh/authorized_keys 
     

 
RSA 인증 설정 이 완료 되 었 습 니 다.이때 Linux 에서 ssh 를 실행 합 니 다.winStar@remoteWinHost, winStar 가 reoteWinHost 에 있 는 비밀 번 호 를 입력 할 필요 가 없습니다.
 
				
 [linuxStar@remoteLinuxHost ~]$ ssh winStar@remoteWinHost 
 Last login: Mon Nov 16 10:15:22 2009 from remoteLinuxHost 

 winStar@remoteWinHost ~ 
 $ 
     

 
반대로 Cygwin 을 사용 하여 Windows 사용자 에 게 RSA 인증 키 쌍 을 만 들 면 공개 키 파일 내용 을 원 격 Linux 시스템 으로 복사 합 니 다 ~/. ssh/authorizedkeys 파일 은 Windows 에서 Linux 까지 암호 없 는 로그 인 을 실현 할 수 있 습 니 다.
실험 절차 4 자동화 스 크 립 트 개발
SSH 의 키 기반 보안 인증 은 암 호 를 입력 하지 않 고 원 격 시스템 과 연결 할 수 있 도록 합 니 다.이러한 기능 을 바탕 으로 우 리 는 스 크 립 트 를 개발 하여 여러 원 격 시스템 에 연결 해 야 하 는 자동 작업 을 수행 할 수 있 습 니 다.예 를 들 어 서로 다른 플랫폼 에서 C/C++ 의 코드 를 자동 으로 컴 파일 하고 각종 시스템 에서 의 자동 테스트 임 무 를 수행 하 는 등 이다.
다음 예 는 간단 한 셸 스 크 립 트 로 원 격 시스템 에 연결 하여 pwd 명령 을 수행 합 니 다.
목록 1. SSH 공증 을 통 해 현재 시스템 간 스 크 립 트 자동 화 된 예제 스 크 립 트 index. sh 를 검증 합 니 다.
				
 #!/bin/sh 
 #/home/linuxStar/index.sh 
 sayHello() { 
  ssh $1 <<EOF 
 echo "Hello! I'm from $1, I'm at" 
 pwd 
 //          
 EOF 
 } 
 sayHello winStar@remoteWinHost & 
 //                 。  ,sayHello ITMUser@remoteAIXHost & 

 wait //           
     

 
이 스 크 립 트 를 실행 하면 다음 결 과 를 볼 수 있 습 니 다.
 
				
 [linuxStar@remoteLinuxHost ~]$ ./index.sh 
 Hello! I'm from winStar@remoteWinHost, I'm at 
 /home/winStar 
     

 
실제 작업 에서 pwd 는 실제 명령 조합 이나 script 호출 으로 대체 할 수 있 습 니 다.또한 스 크 립 트 에 더 많은 원 격 시스템 을 연결 하여 하나의 중심 제어 시스템 이 여러 원 격 시스템 에 연결 하여 작업 을 수행 하 는 구조 가 될 수 있 습 니 다.
& wait 에 대한 팁.sayHello ITMUser@remoteWinHost끝의 & 기호의 역할 은 이 명령 을 백 스테이지 에 놓 고 실행 하 는 것 이다.이 기 호 를 사용 하면 여러 시스템 에서 병행 작업 을 동시에 수행 할 수 있 으 며, 명령 이 실 행 된 후에 다음 작업 을 수행 할 필요 가 없습니다.wait 명령 은 모든 배경 작업 이 완료 되 기 를 기다 리 고 있 습 니 다.보통 우 리 는 wait 후에 실행 결 과 를 분석 하 는 코드 를 개발 합 니 다.
후기
SSH 키 인증 설정 을 제외 하고 저 희 는 삼바 와 NFS 서 비 스 를 사용 하여 서로 다른 시스템 에서 데 이 터 를 공유 하여 여러 시스템 에 연결 하여 작업 을 수행 할 수 있 는 자동화 스 크 립 트 를 완성 하면 작업 효율 과 품질 을 대폭 향상 시 킬 수 있 습 니 다.

좋은 웹페이지 즐겨찾기