탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 11.1 관리: 보안 서비스 Oracle Solaris 11.1 Information Library (한국어) |
Secure Shell에 대한 호스트 기반 인증 설정 방법
Secure Shell은 로컬 셸과 원격 셸 간의 보안 액세스를 제공합니다. 자세한 내용은 ssh_config(4) 및 ssh(1) 매뉴얼 페이지를 참조하십시오.
다음 작업 맵에서는 사용자의 Secure Shell 사용 절차에 대해 설명합니다.
|
사용자 사이트에서 호스트 기반 인증 또는 사용자 공개 키 인증을 구현한 경우 사용자는 공개/개인 키 쌍을 생성해야 합니다. 추가 옵션은 ssh-keygen(1) 매뉴얼 페이지를 참조하십시오.
시작하기 전에
시스템 관리자에게 호스트 기반 인증이 구성되어 있는지 여부를 확인합니다.
myLocalHost% ssh-keygen -t rsa Generating public/private rsa key pair. …
여기서 -t는 알고리즘 유형으로, rsa, dsa 또는 rsa1 중 하나입니다.
기본적으로 RSA v2 키를 나타내는 파일 이름 id_rsa가 괄호 안에 표시됩니다. Return 키를 눌러 이 파일을 선택할 수 있습니다. 또는 대체 파일 이름을 입력할 수도 있습니다.
Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<Press Return>
.pub 문자열을 개인 키 파일 이름에 추가하면 공개 키의 파일 이름이 자동으로 만들어집니다.
이 문장암호는 개인 키를 암호화하는 데 사용됩니다. 널 항목은 사용하지 않는 것이 좋습니다. 문장암호는 입력할 때 표시되지 않습니다.
Enter passphrase (empty for no passphrase): <Type passphrase>
Enter same passphrase again: <Type passphrase> Your identification has been saved in /home/jdoe/.ssh/id_rsa. Your public key has been saved in /home/jdoe/.ssh/id_rsa.pub. The key fingerprint is: 0e:fb:3d:57:71:73:bf:58:b8:eb:f3:a3:aa:df:e0:d1 jdoe@myLocalHost
키 파일의 경로가 올바른지 확인합니다.
% ls ~/.ssh id_rsa id_rsa.pub
이 단계에서는 공개/개인 키 쌍이 만들어져 있습니다.
이제 원격 호스트에 로그인할 수 있습니다. 자세한 내용은 Secure Shell을 사용하여 원격 호스트에 로그인하는 방법을 참조하십시오.
% cat /etc/ssh/ssh_host_dsa_key.pub | ssh RemoteHost \ 'cat >> ~./ssh/known_hosts && echo "Host key copied"'
Enter password: <Type password> Host key copied %
한 행에 백슬래시 없이 명령을 입력합니다.
myLocalHost% cat $HOME/.ssh/id_rsa.pub | ssh myRemoteHost \ 'cat >> .ssh/authorized_keys && echo "Key copied"'
파일이 복사되면 "Key copied" 메시지가 표시됩니다.
Enter password: Type login password Key copied myLocalHost%
절차는 Secure Shell에서 암호 프롬프트를 줄이는 방법을 참조하십시오. 자세한 내용은 ssh-agent(1) 및 ssh-add(1) 매뉴얼 페이지를 참조하십시오.
다음 절차에서는 개인 키를 변경하지 않습니다. 이 절차에서는 개인 키에 대한 인증 방식인 문장암호를 변경합니다. 자세한 내용은 ssh-keygen(1) 매뉴얼 페이지를 참조하십시오.
-p 옵션을 사용하여 ssh-keygen 명령을 입력하고 프롬프트에 응답합니다.
myLocalHost% ssh-keygen -p Enter file which contains the private key (/home/jdoe/.ssh/id_rsa):<Press Return> Enter passphrase (empty for no passphrase): <Type passphrase> Enter same passphrase again: <Type passphrase>
여기서 -p는 개인 키 파일의 문장암호 변경을 요청합니다.
ssh 명령을 입력하고 원격 호스트의 이름 및 로그인을 지정합니다.
myLocalHost% ssh myRemoteHost -l username
프롬프트가 원격 호스트의 신뢰성을 묻습니다.
The authenticity of host 'myRemoteHost' can't be established. RSA key fingerprint in md5 is: 04:9f:bd:fc:3d:3e:d2:e7:49:fd:6e:18:4f:9c:26 Are you sure you want to continue connecting(yes/no)?
일반적으로 이 프롬프트는 원격 호스트에 대한 초기 연결에 표시됩니다.
Are you sure you want to continue connecting(yes/no)? no
관리자가 전역 /etc/ssh/ssh_known_hosts 파일을 업데이트합니다. 업데이트된 ssh_known_hosts 파일은 이 프롬프트가 표시되지 않도록 합니다.
Are you sure you want to continue connecting(yes/no)? yes
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
jdoe@myRemoteHost's password: <Type password> Last login: Wed Sep 7 09:07:49 2011 from myLocalHost Oracle Corporation SunOS 5.11 September 2011 myRemoteHost%
보낸 명령이 암호화되고, 수신한 응답이 암호화됩니다.
완료되면 exit를 입력하거나 일반적인 셸 종료 방법을 사용합니다.
myRemoteHost% exit myRemoteHost% logout Connection to myRemoteHost closed myLocalHost%
예 15-2 Secure Shell에 원격 GUI 표시
이 예에서 jdoe는 두 시스템 모두에서 초기 사용자이므로 Software Installation 권한 프로파일이 지정됩니다. jdoe는 원격 시스템에서 패키지 관리자 GUI를 사용하려고 합니다. X11Forwarding 키워드의 기본값이 계속 yes이고 xauth 패키지가 원격 시스템에 설치됩니다.
% ssh -l jdoe -X myRemoteHost jdoe@myRemoteHost's password: <Type password> Last login: Wed Sep 7 09:07:49 2011 from myLocalHost Oracle Corporation SunOS 5.11 September 2011 myRemoteHost% packagemanager &
문장암호 및 암호를 입력하지 않고 Secure Shell을 사용하려는 경우 에이전트 데몬을 사용할 수 있습니다. 세션 시작 시 데몬을 시작합니다. 그런 다음 ssh-add 명령을 사용하여 에이전트 데몬으로 개인 키를 저장합니다. 호스트마다 계정이 다른 경우 세션에 필요한 키를 추가합니다.
필요한 경우 다음 절차의 설명에 따라 수동으로 에이전트 데몬을 시작할 수 있습니다.
myLocalHost% eval `ssh-agent` Agent pid 9892
myLocalHost% pgrep ssh-agent 9892
ssh-add 명령을 입력합니다.
myLocalHost% ssh-add Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase> Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa) myLocalHost%
myLocalHost% ssh myRemoteHost -l jdoe
문장암호 프롬프트가 표시되지 않습니다.
예 15-3 ssh-add 옵션 사용
이 예에서는 jdoe가 에이전트 데몬에 두 개의 키를 추가합니다. -l 옵션이 데몬에 저장된 모든 키를 나열하는 데 사용됩니다. 세션 종료 시 -D 옵션이 에이전트 데몬에서 모든 키를 제거하는 데 사용됩니다.
myLocalHost% ssh-agent myLocalHost% ssh-add Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase> Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa) myLocalHost% ssh-add /home/jdoe/.ssh/id_dsa Enter passphrase for /home/jdoe/.ssh/id_dsa: <Type passphrase> Identity added: /home/jdoe/.ssh/id_dsa(/home/jdoe/.ssh/id_dsa) myLocalHost% ssh-add -l md5 1024 0e:fb:3d:53:71:77:bf:57:b8:eb:f7:a7:aa:df:e0:d1 /home/jdoe/.ssh/id_rsa(RSA) md5 1024 c1:d3:21:5e:40:60:c5:73:d8:87:09:3a:fa:5f:32:53 /home/jdoe/.ssh/id_dsa(DSA) User conducts Oracle Solaris Secure Shell transactions
myLocalHost% ssh-add -D Identity removed: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa.pub) /home/jdoe/.ssh/id_dsa(DSA)
기본적으로 root 역할은 Secure Shell에 원격으로 로그인할 수 없습니다. 이전까지 루트는 원격 시스템의 저장소에 ZFS 풀 데이터를 보내는 것과 같은 중요한 작업에 Secure Shell을 사용했습니다. 이 절차에서 root 역할은 원격 ZFS 관리자로 작업할 수 있는 사용자를 만듭니다.
시작하기 전에
root 역할을 맡아야 합니다. 자세한 내용은 지정된 관리 권한을 사용하는 방법을 참조하십시오.
예를 들어, zfsroot 사용자를 만들고 암호를 제공합니다.
source # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot source # passwd zfsroot Enter password: Retype password: #
dest # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot dest # passwd zfsroot ...
zfsroot 사용자는 두 시스템에서 모두 동일하게 정의되어야 합니다.
키 쌍은 소스 시스템에 만들어집니다. 그런 후 공개 키가 대상 시스템에서 zfsroot 사용자에 복사됩니다.
# ssh-keygen -t rsa -P "" -f ~/id_migrate Generating public/private rsa key pair. Your identification has been saved in /root/id_migrate. Your public key has been saved in /root/id_migrate.pub. The key fingerprint is: 3c:7f:40:ef:ec:63:95:b9:23:a2:72:d5:ea:d1:61:f0 root@source
# scp ~/id_migrate.pub zfsroot@dest: The authenticity of host 'dest (10.134.76.126)' can't be established. RSA key fingerprint is 44:37:ab:4e:b7:2f:2f:b8:5f:98:9d:e9:ed:6d:46:80. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'dest,10.134.76.126' (RSA) to the list of known hosts. Password: id_migrate.pub 100% |*****************************| 399 00:00
source # usermod -P +'ZFS File System Management' -S files zfsroot dest # usermod -P +'ZFS File System Management' -S files zfsroot
dest # profiles zfsroot zfsroot: ZFS File System Management Basic Solaris User All
root@dest # su - zfsroot Oracle Corporation SunOS 5.11 11.1 May 2012 zfsroot@dest $ mkdir -m 700 .ssh zfsroot@dest $ cat id_migrate.pub >> .ssh/authorized_keys
root@source# ssh -l zfsroot -i ~/id_migrate dest \ pfexec /usr/sbin/zfs snapshot zones@test root@source# ssh -l zfsroot -i ~/id_migrate dest \ pfexec /usr/sbin/zfs destroy zones@test
root@source# zfs snapshot -r rpool/zones@migrate-all root@source# zfs send -rc rpool/zones@migrate-all | \ ssh -l zfsroot -i ~/id_migrate dest pfexec /usr/sbin/zfs recv -F zones
root@dest# usermod -P -'ZFS File System Management' zfsroot root@dest# su - zfsroot zfsroot@dest# cp .ssh/authorized_keys .ssh/authorized_keys.bak zfsroot@dest# grep -v root@source .ssh/authorized_keys.bak> .ssh/authorized_keys
로컬 포트가 원격 호스트에 전달되도록 지정할 수 있습니다. 소켓이 로컬측의 포트를 수신 대기하도록 효과적으로 할당됩니다. 보안 채널을 통해 이 포트에서 원격 호스트로의 연결이 설정됩니다. 예를 들어, IMAP4를 사용하여 원격으로 전자 메일을 얻기 위해 포트 143을 지정할 수 있습니다. 마찬가지로 원격측에서도 포트를 지정할 수 있습니다.
시작하기 전에
포트 전달을 사용하려면 관리자가 원격 Secure Shell 서버에서 포트 전달을 사용으로 설정했어야 합니다. 자세한 내용은 Secure Shell에서 포트 전달을 구성하는 방법을 참조하십시오.
원격 통신을 수신 대기하는 로컬 포트를 지정합니다. 또한 통신을 전달하는 원격 호스트 및 원격 포트를 지정합니다.
myLocalHost% ssh -L localPort:remoteHost:remotePort
원격 통신을 수신 대기하는 원격 포트를 지정합니다. 또한 통신을 전달하는 로컬 호스트 및 로컬 포트를 지정합니다.
myLocalHost% ssh -R remotePort:localhost:localPort
예 15-4 로컬 포트 전달을 사용하여 메일 수신
다음 예에서는 로컬 포트 전달을 사용하여 원격 서버에서 안전하게 메일을 수신할 수 있는 방법을 보여 줍니다.
myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost
이 명령은 myLocalHost의 포트 9143에서 포트 143으로 연결을 전달합니다. 포트 143은 myRemoteHost의 IMAP v2 서버 포트입니다. 메일 응용 프로그램을 실행한 사용자는 localhost:9143에서처럼 IMAP 서버에 대한 로컬 포트 번호를 지정합니다.
localhost와 myLocalHost를 혼동하지 마십시오. myLocalHost는 가상 호스트 이름이며, localhost는 로컬 시스템을 식별하는 키워드입니다.
예 15-5 원격 포트 전달을 사용하여 방화벽 외부에서 통신
이 예에서는 기업 환경의 사용자가 외부 네트워크의 호스트에서 회사 방화벽 내부의 호스트로 연결을 전달할 수 있는 방법을 보여 줍니다.
myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost
이 명령은 myOutsideHost의 포트 9022에서 로컬 호스트의 포트 22 sshd 서버로 연결을 전달합니다.
myOutsideHost% ssh -p 9022 localhost myLocalHost%
다음 절차에서는 scp 명령을 사용하여 호스트 간에 암호화된 파일을 복사하는 방법을 보여 줍니다. 로컬 호스트와 원격 호스트 간 또는 두 원격 호스트 간에 암호화된 파일을 복사할 수 있습니다. scp 명령은 인증 프롬프트를 표시합니다. 자세한 내용은 scp(1) 매뉴얼 페이지를 참조하십시오.
또한 sftp 보안 파일 전송 프로그램을 사용할 수 있습니다. 자세한 내용은 sftp(1) 매뉴얼 페이지를 참조하십시오. 예는 예 15-6를 참조하십시오.
주 - 감사 서비스는 ft 감사 클래스를 통해 sftp 트랜잭션을 감사할 수 있습니다. scp의 경우 감사 서비스는 ssh 세션에 대한 액세스 및 종료를 감사할 수 있습니다.
소스 파일, 원격 대상의 사용자 이름 및 대상 디렉토리를 지정합니다.
myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase> myfile.1 25% |******* | 640 KB 0:20 ETA myfile.1
문장암호를 입력하면 진행 상황이 표시됩니다. 위 출력의 두번째 행을 참조하십시오. 다음과 같이 진행 상황이 표시됩니다.
파일 이름
파일 전송 백분율
파일 전송 백분율을 나타내는 일련의 별표
데이터 전송량
전체 파일의 예상 도착 시간(ETA), 즉 남은 시간
예 15-6 sftp 명령 사용 시 포트 지정
이 예에서는 사용자가 sftp 명령으로 특정 포트를 사용하려고 합니다. 사용자는 -o 옵션을 사용하여 포트를 지정합니다.
% sftp -o port=2222 guest@RemoteFileServer
Secure Shell을 사용하여 방화벽 내부의 호스트에서 방화벽 외부의 호스트로의 연결을 설정할 수 있습니다. 이 작업을 수행하려면 구성 파일에서 또는 명령줄 옵션으로 ssh에 대한 프록시 명령을 지정합니다. 명령줄 옵션은 예 15-7을 참조하십시오.
일반적으로 구성 파일을 통해 ssh 상호 작용을 사용자 정의할 수 있습니다.
~/.ssh/config에서 고유의 개인 파일을 사용자 정의할 수 있습니다.
또한 관리 구성 파일 /etc/ssh/ssh_config의 설정을 사용할 수도 있습니다.
두 가지 유형의 프록시 명령으로 파일을 사용자 정의할 수 있습니다. 프록시 명령 중 하나는 HTTP 연결에 사용되며, 나머지 하나는 SOCKS5 연결에 사용됩니다. 자세한 내용은 ssh_config(4) 매뉴얼 페이지를 참조하십시오.
다음 구문을 사용하여 필요에 따라 행을 여러 개 추가합니다.
[Host outside-host] ProxyCommand proxy-command [-h proxy-server] \ [-p proxy-port] outside-host|%h outside-port|%p
명령줄에서 원격 호스트 이름이 지정된 경우 프록시 명령 지정을 인스턴스로 제한합니다. outside-host에 와일드카드를 사용하면 일련의 호스트에 프록시 명령 지정이 적용됩니다.
프록시 명령을 지정합니다.
명령은 다음 중 하나일 수 있습니다.
HTTP 연결의 경우 /usr/lib/ssh/ssh-http-proxy-connect
SOCKS5 연결의 경우 /usr/lib/ssh/ssh-socks5-proxy-connect
해당 옵션은 각각 프록시 서버와 프록시 포트를 지정합니다. 있을 경우 프록시는 프록시 서버 및 프록시 포트를 지정하는 환경 변수(예: HTTPPROXY, HTTPPROXYPORT, SOCKS5_PORT, SOCKS5_SERVER 및 http_proxy)를 대체합니다. http_proxy 변수는 URL을 지정합니다. 옵션이 사용되지 않을 경우 관련 환경 변수를 설정해야 합니다. 자세한 내용은 ssh-socks5-proxy-connect(1) 및 ssh-http-proxy-connect(1) 매뉴얼 페이지를 참조하십시오.
연결할 특정 호스트를 지정합니다. 명령줄에서 호스트를 지정하려면 %h 대체 인수를 사용합니다.
연결할 특정 포트를 지정합니다. 명령줄에서 포트를 지정하려면 %p 대체 인수를 사용합니다. Host outside-host 옵션을 사용하지 않고 %h 및 %p를 지정하면 ssh 명령이 호출될 때마다 호스트 인수에 프록시 명령이 적용됩니다.
예를 들어, 다음 명령어를 입력합니다.
myLocalHost% ssh myOutsideHost
이 명령은 개인 구성 파일에서 myOutsideHost에 대한 프록시 명령 지정을 검색합니다. 지정을 찾을 수 없을 경우 명령은 시스템 차원의 구성 파일 /etc/ssh/ssh_config 에서 찾습니다. ssh 명령이 프록시 명령으로 대체됩니다.
예 15-7 Secure Shell 명령줄에서 방화벽 외부의 호스트에 연결
구성 파일에서 프록시 명령을 지정하는 방법은 방화벽 외부의 호스트에 대한 기본 Secure Shell 연결 설정 방법에서 설명됩니다. 이 예에서는 ssh 명령줄에서 프록시 명령이 지정됩니다.
% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \ -h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost
ssh 명령에 대한 -o 옵션은 명령줄에서 프록시 명령을 지정하는 방법을 제공합니다. 이 예의 명령은 다음을 수행합니다.
ssh를 HTTP 프록시 명령으로 대체합니다.
포트 8080 및 myProxyServer를 프록시 서버로 사용합니다.
myOutsideHost의 포트 22에 연결합니다.