OpenSSH를 사용하여 원격 터미널 실행을 위한 보안 환경을 제공합니다. OpenSSH와 터미널의 기본 사용법은 매우 간단하지만, 이 기사에서는 원격 호스트에 자동 로그인을 허용하는 다른 요소, 원격 애플리케이션을 실행하는 방법, 호스트 간에 파일을 안전하게 복사하는 방법도 다룹니다.
이 시리즈 정보
일반적인 UNIX® 관리자는 관리 프로세스를 지원하는 데 자주 사용되는 주요 유틸리티, 노하우 및 시스템 세트를 가지고 있습니다. 다양한 프로세스를 간소화하기 위해 다양한 주요 유틸리티, 명령줄 체인 및 스크립트가 존재합니다. 이러한 도구 중 일부는 운영 체제에서 제공되지만 대부분의 노하우는 오랜 경험과 시스템 관리자의 업무에 대한 스트레스를 줄여야 하는 필요성에서 비롯됩니다. 이 기사 시리즈는 이기종 환경에서 관리 작업을 단순화하는 방법을 포함하여 다양한 UNIX 환경에서 사용할 수 있는 도구를 최대한 활용하는 데 중점을 둡니다.
OpenSSH를 사용하는 이유는 무엇입니까?
FTP, Telnet, RCP, Remote Shell(rsh) 등 일상적으로 사용하는 표준 네트워크 서비스는 폐쇄된 환경에서 잘 작동하지만, 이러한 서비스를 사용하여 네트워크를 통해 전송되는 정보는 암호화되지 않습니다. 네트워크나 원격 컴퓨터에서 패킷 스니퍼를 사용하는 사람은 누구나 교환된 정보를 볼 수 있으며 때로는 암호 정보도 볼 수 있습니다.
또한 이러한 모든 서비스에서는 로그인 프로세스를 자동화하는 옵션이 제한되어 있으며 명령문을 실행하기 위해 명령줄에 일반 텍스트 비밀번호를 삽입하는 데 의존하는 경우가 많아 로그인 프로세스가 더욱 안전하지 않게 됩니다.
SSH(Secure Shell) 프로토콜은 이러한 제한을 우회하기 위해 개발되었습니다. SSH는 로그인 및 비밀번호 자격 증명 교환을 포함한 전체 통신 채널에 암호화를 제공하며 공개 및 개인 키와 함께 작동하여 로그인에 대한 자동화된 인증을 제공합니다. SSH를 기본 전송 프로토콜로 사용할 수도 있습니다. 이런 방식으로 SSH를 사용한다는 것은 보안 연결이 열린 후 모든 유형의 정보가 암호화된 채널을 통해 교환될 수 있다는 것을 의미하며, 심지어 HTTP와 SMTP도 이 방법을 사용하여 통신 메커니즘을 보호할 수 있다는 것을 의미합니다.
OpenSSH는 SSH 1 및 SSH 2 프로토콜의 무료 구현입니다. 원래 OpenBSD(Berkeley Software Distribution) 운영 체제의 일부로 개발되었으며 현재는 UNIX 또는 Linux® 및 유사한 운영 체제용 일반 솔루션으로 출시되었습니다.
OpenSSH 설치
OpenSSH는 무료 소프트웨어이며 기본 OpenSSH 웹사이트(참고자료 참조)에서 다운로드할 수 있습니다. OpenSSH 시스템은 Linux, HP-UX, AIX®, Solaris, Mac OS X 등을 포함한 다양한 시스템의 소스 코드로 구축할 수 있습니다. 일반적으로 선택한 플랫폼과 버전에 대해 미리 컴파일된 바이너리를 찾는 것이 가능합니다. 일부 공급업체는 OpenSSH 툴킷을 운영 체제의 일부로 제공하기도 합니다.
OpenSSH를 빌드하려면 다음이 필요합니다.
기본 구성 설정을 사용해야 하는 경우 아래 목록 1에 표시된 대로 일반 빌드 순서를 사용하세요.
$ ./구성 $만들다 $ 설치하다 |
이렇게 하면 바이너리, 라이브러리 및 구성 파일이 /usr/local 디렉터리에 설치됩니다. 예를 들어 바이너리는 /usr/local/bin에, 구성 파일은 /usr/local/etc에 설치됩니다. 다양한 도구를 기본 환경에 통합하려면 --prefix 옵션을 지정하여 기본 디렉터리를 설정하고 --sysconfdir 옵션을 지정하여 구성 파일 위치를 설정해야 할 수도 있습니다.
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh |
지정할 수 있는 다른 일반 옵션은 다음과 같습니다.
구성을 완료한 후 make를 사용하여 일반적인 방법으로 빌드합니다.
빌드 및 설치 프로세스가 완료된 후 먼저 시스템을 고유하게 식별하는 SSH 키를 생성한 다음 클라이언트와 호스트 간의 보안 통신을 활성화하여 시스템을 구성해야 합니다. 다음을 실행할 수 있습니다.
$ 호스트 키 만들기 |
또는 명령줄에서 개별 단계를 수동으로 수행할 수도 있습니다. 세 개의 키(각 주요 암호화 알고리즘: rsa1, rsa 및 dsa에 대해 하나씩)를 생성해야 합니다. 예를 들어, 목록 2에서는 rsa1 키를 생성하는 방법을 보여줍니다.
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key 공개/개인 rsa1 키 쌍을 생성하는 중입니다. 암호를 입력하세요(암호가 없으면 비워두세요): 동일한 암호를 다시 입력하세요. 귀하의 ID는 /etc/ssh//ssh_host_key에 저장되었습니다. 공개 키는 /etc/ssh//ssh_host_key.pub에 저장되었습니다. 키 지문은 다음과 같습니다. 43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 root@remotehost |
비밀번호를 묻는 메시지가 나타납니다. 호스트 키의 경우 키 비밀번호가 필요하지 않을 수 있으므로 Return 키를 눌러 빈 비밀번호를 사용할 수 있습니다. 또는 명령줄에서 -N 옵션을 사용하여 프로세스 속도를 높일 수 있습니다(목록 3 참조).
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N "" 공개/개인 rsa1 키 쌍을 생성하는 중입니다. 귀하의 ID는 /etc/ssh/ssh_host_key에 저장되었습니다. 공개 키는 /etc/ssh/ssh_host_key.pub에 저장되었습니다. 키 지문은 다음과 같습니다. a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 root@remotehost |
이제 rsa 및 dsa 키를 생성하는 프로세스를 반복합니다(목록 4 참조).
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N "" |
이렇게 하면 각 키 유형에 대해 공개 키(.pub로 끝나는 파일에 있음)와 개인 키라는 두 개의 파일이 생성됩니다. 개인 키는 루트 및 SSH 프로세스에서만 읽을 수 있도록 해야 합니다. 이는 자동으로 구성되어야 합니다. 사람들이 알려진 호스트 키 목록에 공개 키를 추가할 수 있도록 NFS(네트워크 파일 시스템) 공유의 중앙 위치에 공개 키를 복사할 수 있습니다.
마지막으로 sshd 프로세스를 시작하고 시작 시 실행되도록 구성해야 합니다. Linux 호스트의 경우 contrib/redhat/sshd.init에서 /etc/init.d에 추가할 수 있는 적절한 init 스크립트를 찾을 수 있습니다.
기본 터미널 액세스에 SSH 사용
OpenSSH의 주요 역할은 UNIX 또는 Linux 호스트에 대한 보안 원격 로그인을 위한 Telnet 프로토콜의 안전한 대안인 SSH 도구입니다.
표준 셸을 사용하여 원격 호스트에 연결하려면 호스트 이름을 입력하기만 하면 됩니다.
$ SSH 원격 호스트 |
기본적으로 시스템은 현재 사용자 이름을 로그인 이름으로 사용하려고 시도합니다. 다른 로그인 이름을 사용하려면 호스트 이름 앞에 로그인 이름을 @ 기호로 구분하여 입력하세요. 예를 들어:
$ ssh mc@remotehost |
사용자 비밀번호를 묻는 메시지가 표시됩니다. 이는 Telnet과 유사합니다.
호스트에 처음 연결하면 "알려진 호스트" 파일에 원격 호스트의 공개 키 사본을 저장할지 묻는 메시지가 표시됩니다(목록 5 참조).
$ ssh 루트@remotehost 호스트 'remotehost (10.211.55.3)'의 신뢰성을 설정할 수 없습니다. RSA 키 지문은 cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b입니다. 계속 연결하시겠습니까(예/아니요)? 경고: 알려진 호스트 목록에 'remotehost'(RSA)가 영구적으로 추가되었습니다. |
앞으로는 이 경고를 받지 않게 되지만, 원격 호스트가 반환한 공개 키가 호스트 파일의 공개 키와 일치하지 않아 해커 공격 가능성이 있음을 시스템이 감지하면 경고가 발행됩니다. 이는 관리자가 호스트 키만 다시 생성했음을 의미할 수도 있습니다.
기본적으로 SSH 세션은 암호화되어 있어 누구도 귀하의 세션에 스누핑하거나 비밀번호나 실행 중인 명령 및 작업을 아는 것이 거의 불가능하다는 점을 제외하면 SSH와 Telnet 세션 간에는 차이가 없습니다.
SSH를 사용하면 셸을 사용하지 않고 원격 호스트에서 직접 명령을 실행할 수도 있습니다. 예를 들어 원격 호스트에서 who 명령을 실행하려면 목록 6을 참조하세요.
목록 6. 원격 호스트에서 who 명령 실행$ ssh mc@remotehost 누구 관리 콘솔 11월 23일 14:04 mc ttyp1 12월 2일 10:53 (sulaco.mcslp.pri) mc ttyp2 12월 10일 06:50 (sulaco.mcslp.pri) 관리자 ttyp3 12월 12일 13:33 mc ttyp4 12월 15일 12:38(nautilus.mcslp.p) |
원격 실행은 또한 클라이언트 호스트의 표준 입력, 출력 및 오류를 에뮬레이트합니다. 이는 출력을 원격 명령으로 리디렉션할 수 있음을 의미합니다. 예를 들어 명령의 출력을 원격 호스트의 SSH로 파이프하여 원격 파일에 직접 정보를 추가할 수 있습니다(목록 7 참조).
목록 7. 원격 파일에 직접 정보 추가$ echo "Hello World" |ssh mc@remotehost 'cat >> helloworlds.txt' |
SSH를 사용하여 로그인 프로세스를 단순화할 때 이 방법을 사용하면 생산성을 높일 수 있습니다.
SFTP를 사용하여 파일 교환
sft 명령은 SSH 프로토콜에서 제공하는 보안 통신 채널을 사용하는 FTP의 대안입니다.
SFTP 연결을 열려면 명령줄에서 호스트 이름을 지정합니다.
$ sftp 원격 호스트 |
위 명령은 현재 호스트와 동일한 로그인 방법을 사용한다고 가정합니다. 다른 로그인 방법을 사용하려면 호스트 이름 앞에 사용자 이름을 추가하세요.
$ sftp mc@remotehost |
SFTP는 FTP와 유사하게 작동하지만 몇 가지 제한 사항과 차이점이 있습니다. 예를 들어, FTP의 dir은 긴 파일 목록을 제공합니다(목록 8 참조).
ftp> 디렉토리 502 'EPSV': 명령을 이해할 수 없습니다. 227 패시브 모드 진입 (192,168,0,110,150,159) 150 디렉토리 목록을 위한 ASCII 모드 데이터 연결을 여는 중입니다. 총 1472 drwx------ 3 mc 직원 102 11월 4일 11:17 데스크톱 drwx------ 3 mc 직원 102 11월 4일 11:17 문서 drwx------ 18 mc 직원 612 11월 5일 18:01 라이브러리 drwx------ 3 mc 직원 102 11월 4일 11:17 영화 drwx------ 3 mc Staff 102 11월 4일 11:17 음악 drwx------ 4 mc 직원 136 11월 4일 11:17 사진 drwxr-xr-x 4 mc 직원 136 11월 4일 11:17 공개 drwxr-xr-x 6 mc 직원 204 11월 4일 11:17 사이트 drwxrwxrwx 3 루트 직원 102 12월 24일 07:30 tmp drwxr-xr-x 7 루트 직원 238 12월 11일 08:39 시험판 226 전송이 완료되었습니다. |
SFTP에서 dir은 호스트 디렉터리 목록 명령(UNIX 또는 Linux에서는 ls)에 대한 별칭 역할을 합니다. 기본적으로 dir은 짧은 목록만 제공합니다(목록 9 참조).
sftp> 디렉토리 데스크탑 문서 라이브러리 영화 음악 사진 공개 사이트 임시 평가판 |
긴 목록을 얻으려면 ls와 동일한 옵션을 사용하십시오(목록 10 참조).
sftp> 디렉토리 -l drwx------ 3 mc 직원 102 11월 4일 11:17 데스크톱 drwx------ 3 mc 직원 102 11월 4일 11:17 문서 drwx------ 18 mc 직원 612 11월 5일 18:01 라이브러리 drwx------ 3 mc 직원 102 11월 4일 11:17 영화 drwx------ 3 mc Staff 102 11월 4일 11:17 음악 drwx------ 4 mc 직원 136 11월 4일 11:17 사진 drwxr-xr-x 4 mc 직원 136 11월 4일 11:17 공개 drwxr-xr-x 6 mc 직원 204 11월 4일 11:17 사이트 drwxrwxrwx 3 루트 직원 102 12월 24일 07:30 tmp drwxr-xr-x 7 루트 직원 238 12월 11일 08:39 시험판 |
디렉토리 변경(cd, lcd 로컬로), 디렉토리 생성(mkdir), 파일 전송(put) 및 수신(get)과 같은 기타 명령은 변경되지 않습니다. 후자의 두 명령인 put 및 get은 둘 다 와일드카드를 허용하지만(FTP의 mput 및 mget과 유사) SFTP에서 와일드카드 없이 여러 파일을 전송할 때는 주의해야 합니다. 예를 들어, sftp> mget file1 file2 file3은 file1 및 file2를 가져와서 로컬 디렉토리 file3에 배치하려고 시도하는 것으로 인식되지만 해당 디렉토리가 존재하지 않을 수 있습니다.
scp를 사용하여 호스트 간 파일 복사
scp 명령은 SSH 프로토콜을 사용하여 파일을 전송한다는 점을 제외하면 rc 명령과 유사하게 작동합니다. 컨텐츠 관련 파일을 전송하거나 인터넷에서 자동으로 파일을 교환할 때는 scp가 훨씬 좋습니다.
형식은 rcp와 유사합니다. 복사할 파일 경로를 지정하고 필요한 경우 호스트 이름을 병합해야 합니다. 예를 들어 원격 호스트에서 로컬 시스템으로 .bashrc 파일을 복사하려면 다음을 사용합니다.
$ scp 원격 호스트:/users/mc/.bashrc ~/.bashrc |
이전과 마찬가지로 사용할 사용자 이름을 지정하려면 @ 기호로 구분된 사용자 이름을 호스트 앞에 붙입니다.
$ scp mc@remotehost:/users/mc/.bashrc ~/.bashrc |
연결하려는 사용자에게 읽기 권한이 있다고 가정하면 홈 디렉터리의 정보에 액세스하려면 메타 문자 ~를 사용해야 합니다.
$ scp mc@remotehost:~mc/.bashrc ~/.bashrc |
로그인한 사용자의 홈 디렉토리에서 복사하려면 다음을 사용하십시오.
$ scp mc@remotehost:.bashrc ~/.bashrc |
scp 명령은 표준 확장 규칙도 지원합니다. 따라서 모든 .bash* 파일을 복사하려면 다음을 사용할 수 있습니다.
$ scp mc@remotehost:.bash* ~ |
확장 중괄호({})를 사용하여 개별 파일을 보다 구체적으로 선택할 수도 있습니다.
$ scp mc@remotehost:".bash{rc,_path,_aliases,_vars}" ~ |
파일 경로(전체 원격 경로 표현식이 아님)의 확장 중괄호는 큰따옴표로 묶여 있습니다.
위의 모든 예에서는 원격 호스트의 비밀번호를 묻는 메시지가 표시됩니다. 이는 호스트에게 개인 키의 공개 부분을 제공함으로써 방지할 수 있습니다.
공개 키를 사용하여 자동 로그인 활성화
ssh, sftp 또는 scp를 사용하여 원격 시스템에 로그인하는 경우에도 로그인 프로세스를 완료하려면 비밀번호가 필요합니다. 공개 또는 개인 키를 생성하고, 키의 공개 부분을 ~/.ssh/authorized_keys 파일에 추가하고, 유효한 키를 원격 사이트와 교환함으로써 비밀번호 제공 요구 사항을 없애고 자동 로그인을 허용할 수 있습니다.
공개 키 또는 개인 키를 생성하려면 ssh-keygen을 사용하여 키 암호화 유형을 지정해야 합니다. 데모에서는 rsa 키 유형이 사용되었지만 다른 키 유형도 유효합니다. 키를 작성하려면 목록 11을 참조하십시오.
$ SSH-keygen-trsa 공개/개인 RSA 키 쌍을 생성하는 중입니다. 키를 저장할 파일을 입력하세요(/root/.ssh/id_rsa): |
키(공개 및 비공개 구성 요소)가 들어 있는 파일의 위치를 입력해야 합니다. 일반적으로 기본값(홈 디렉토리의 .ssh 디렉토리)을 사용하는 것이 좋습니다(목록 12 참조).
'/root/.ssh' 디렉토리를 생성했습니다. 암호를 입력하세요(암호가 없으면 비워두세요): |
이 단계에서 비밀번호를 입력하면 보안키 파일이 생성되는데, 해당 키를 사용할 때마다 비밀번호를 입력해야 합니다. Return 키를 누르면 비밀번호가 필요하지 않음을 의미합니다(목록 13 참조).
목록 13. Return 키를 눌러 비밀번호 요구사항 건너뛰기동일한 암호를 다시 입력하세요. 귀하의 신분증은 /root/.ssh/id_rsa에 저장되었습니다. 공개 키는 /root/.ssh/id_rsa.pub에 저장되었습니다. 키 지문은 다음과 같습니다. 98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba 루트@remotehost |
이제 공개 키(id_rsa.pub)와 해당 개인 키(id_rsa)가 생성되었습니다.
자동 로그인을 활성화하려면 공개 키의 내용을 원격 호스트의 ~/.ssh 디렉터리에 있는 Authorized_keys 파일에 복사해야 합니다. SSH를 사용하여 이를 자동화할 수 있습니다(목록 14 참조).
$ 고양이 ./.ssh/id_rsa.pub | ssh mc@remotehost '고양이 >> .ssh/authorized_keys'; |
또한 여러 호스트에서 이 작업을 자주 수행하는 경우 목록 15에 표시된 대로 작은 스크립트나 셸 함수를 사용하여 필요한 모든 단계를 수행할 수 있습니다.
OLDDIR='비밀번호'; if [ -z "$1" ]; echo user@host 정보가 필요합니다. 출구; fi; CD $HOME; if [ -e "./.ssh/id_rsa.pub" ]; 고양이 ./.ssh/id_rsa.pub | ssh $1 '고양이 >> .ssh/authorized_keys'; 또 다른 ssh-keygen -trsa; 고양이 ./.ssh/id_rsa.pub | ssh $1 '고양이 >> .ssh/authorized_keys'; fi; CD $OLDDIR |
setremotekey 스크립트를 사용하여 기존 키를 복사할 수 있습니다. 키가 존재하지 않는 경우 복사하기 전에 키를 생성하세요.
$ setremotekey mc@remotehost |
이제 공개 키를 사용하여 원격 호스트에 로그인해야 할 때마다 원격 호스트에서 해당 사용자가 허용하는 키 목록과 함께 개인 키 스크립트를 사용할 수 있습니다.
요약
OpenSSH는 컴퓨터 간의 통신 및 정보 전송을 보호하는 중요한 도구입니다. 이는 Telnet, FTP 및 RCP와 같은 기존 도구에 대한 안전한 대안일 뿐만 아니라 Subversion, X Windows System 및 rsync와 같은 다른 서비스에 대한 전송 프로토콜 역할도 할 수 있습니다. 이 기사에서는 OpenSSH를 시작하고 실행하는 데 필요한 기본 단계, OpenSSH에서 제공하는 기본 도구를 가장 잘 사용하는 방법, 키 교환 도구를 사용하여 로그인 및 연결 문제를 단순화하는 방법을 보여줍니다.