ssh [-l 사용자명] [-p 포트번호] [-v] 호스트명|사용자명@호스트명 [커맨드]
root@wl ~ # ssh -l userid www.sample.com
암호:
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
userid@sample ~ $ exit
root@wl ~ # ssh -l userid www.sample.com uname -r
암호:
5.10 1)
root@wl ~ #
1) [uname -r]명령의 결과다.
root@wl ~ # tar cvfz - data | ssh root@wl2 "tar xvfz -"ssh를 이용해 원격에 접속한 후, tar.gz 형식의 데이터를 전송해 압축을 푸는 방법이다. 단순히 전송하려면 scp를 이용하거나, 원격에서 tar대신 dd, cat 명령을 사용한다.
root@wl ~ # ssh -C username@sshdserver ...
root@wl ~ # vi /etc/ssh/sshd_config PermitRootLogin yes root@wl ~ # svcadm restart sshPermitRootLogin 에 사용할 수 있는 옵션은 아래와 같이 4가지다. 자세한 사항은 sshd_config(4)를 확인해보자.
root@wl ~ # vi /etc/ssh/sshd_config Port 222 root@wl ~ # svcadm restart ssh
root@wl ~ # cd /etc/ssh root@wl /etc/ssh # rm ssh_host_* root@wl /etc/ssh # cd /lib/svc/method root@wl /lib/svc/method # ./sshd -c Creating new rsa public/private host key pair Creating new dsa public/private host key pair root@wl /lib/svc/method # svcadm restart ssh
scp [[사용자명@]호스트명:]파일명1 [...] [[사용자명@]호스트명:]파일명2
root@wl ~ # mkfile 10m root@wl ~ # scp 10m wl2:/root 암호: 10m 100% |*****************************| 10240 KB 00:02 root@wl ~ #
root@wl ~ # sftp 사용자명@호스트명 암호: sftp> ? 사용할 수 있는 명령: cd 경로 원격 디렉토리를 '경로'로 변경 lcd 경로 로컬 디렉토리를 '경로'로 변경 chgrp 그룹 경로 '경로' 파일 그룹을 '그룹'으로 변경 chmod 모드 경로 '경로' 파일의 권한을 '모드'로 변경 chown 소유 경로 '경로' 파일의 소유자를 '소유자'로 변경 help 해당 도움말 텍스트 표시 get 원격 경로 [로컬 경로] 파일 다운로드 lls [ls 옵션 [경로]] 로컬 디렉토리 목록 표시 ln 이전 경로 새 경로 원격 파일 Symlink lmkdir 경로 로컬 디렉토리 만들기 lpwd 로컬 작업 디렉토리 인쇄 ls [경로] 원격 디렉토리 목록 표시 lumask umask 로컬 umask를 'umask'로 설정 mkdir 경로 원격 디렉토리 만들기 put 로컬 경로 [원격 경로] 파일 업로드 pwd 원격 작업 디렉토리 표시 exit sftp 종료 quit sftp 종료 rename 이전 경로 새 경로 원격 파일 이름 재지정 rmdir 경로 원격 디렉토리 제거 rm 경로 원격 파일 삭제 symlink 이전 경로 새 경로 원격 파일 Symlink version SFTP 버전 표시 !명령 로컬 쉘에서 '명령' 실행l ! 로컬 쉘로 가기 ? 해당 도움말 텍스트 표시 sftp> ls -l ... -rw-r--r-- 0 0 0 1048576 sftptest ... sftp> get sftptest /root/sftptest을(를) tftptest(으)로 불러오는 중입니다. sftp> exit root@wl ~ #
root@wl ~ # ssh-keygen -t dsa -b 1024 공개/전용 dsa 키 쌍 생성중. 키를 저장할 파일을 입력하십시오. (/root/.ssh/id_dsa): 디렉토리 '/root/.ssh'를 만들었음. passphrase 입력 (passphrase가 없을 경우 비어 있음): ***** 동일한 passphrase를 다시 입력하십시오: ***** 귀하의 ID가 /root/.ssh/id_dsa에 저장되었습니다. 귀하의 공개 키가 /root/.ssh/id_dsa.pub에 저장되었습니다. 키 지문: f0:ce:f9:e9:84:a8:e2:3d:5f:f9:1c:7b:22:78:5e:b7 root@wl root@wl ~ # ls -al ~/.ssh -rw------- 1 root root 744 11월 8일 22:41 id_dsa -rw-r--r-- 1 root root 597 11월 8일 22:41 id_dsa.pub root@wl ~ #위와 같이 하면 두개의 파일이 생긴다. id_dsa는 개인키, id_dsa.pub는 공개키를 담은 파일이다. [-t]는 암호화 방식을 나타내며 dsa외에 rsa를 선택할 수 있다. [-b] 이후의 숫자는 키 페어의 비트(기본값은 1024)를 나타낸다.
root@wl2 ~ # ls -al id_dsa.pub -rw-r--r-- 1 root root 597 11월 8일 22:46 id_dsa.pub root@wl2 ~ # mkdir ~/.ssh/ root@wl2 ~ # mv id_dsa.pub ~/.ssh/authorized_keys 1) root@wl2 ~ # vi /etc/ssh/sshd_config 1) RSAAuthentication yes root@wl2 ~ # svcadm restart ssh1) 공개키 파일을 별도로 지정하지 않았으면 ~/.ssh/authorized_keys 파일을 읽도록 세팅되어있다. 바꿔 말하면 기본 설정으로는 시스템에 있는 사용자마다 각각 authorized_keys 파일을 설정해야 한다는 의미다. authorized_keys 파일을 열어보면 한줄로된 텍스트 파일인데, wl 이외의 곳에서도 wl2에 공개키를 이용해 접속하려면, authorized_keys 파일에 한줄씩 덧붙여 주면 된다.
root@wl ~ # ssh wl2 '/root/.ssh/id_dsa' 키에 대한 암호문을 입력하십시오. ***** Last login: Sun Nov 8 22:53:55 2009 from wl Sun Microsystems Inc. SunOS 5.10 Generic January 2005 root@wl2 ~ #
root@wl ~ # ssh-agent $SHELL 1) root@wl ~ # ssh-add ~/.ssh/id_dsa 2) /root/.ssh/id_dsa에 대한 암호문을 입력하십시오. ***** ID 추가: /root/.ssh/id_dsa (/root/.ssh/id_dsa) root@wl ~ # ssh wl2 Last login: Sun Nov 8 22:56:34 2009 from wl Sun Microsystems Inc. SunOS 5.10 Generic January 2005 root@wl2 ~ #1) 이렇게 하면 셸을 한번 더 실행하게 된다. [eval `ssh-agent`]도 하나의 방법이지만, 이경우 로그아웃 해도 ssh-agent가 그대로 띄워져 있다. (eval을 이용하는 경우 로그아웃 스크립트에 [eval `ssh-agent -k`]을 사용하면 된다) 단순히 [ssh-agent]명령만 주면 아래와 같이 환경변수와 에이전트의 PID를 알려주는 스크립트를 출력함을 알 수 있다.
root@wl ~ # ssh-agent SSH_AUTH_SOCK=/tmp/ssh-oHMhD763/agent.763; export SSH_AUTH_SOCK; SSH_AGENT_PID=764; export SSH_AGENT_PID; echo 에이전트 pid 764; root@wl ~ #2) 만약 id_dsa 파일 권한이 600 으로 설정되어있지 않다면 아래와 같은 메시지가 나오면서 키가 입력되지 않는다.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 경고: 보호되지 않는 개인 키 파일! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 'id_dsa'에 대한 0644 권한이 너무 개방되어 있습니다.
root@wl ~ # vi ~/.profile ... if [ -f ~/.ssh/id_dsa -o -f ~/.ssh/id_rsa ]; then eval `/usr/bin/ssh-agent` /usr/bin/ssh-add fi root@wl ~ # vi ~/.bash_logout if [ "$SSH_AGENT_PID" != "" ]; then LANG=C; eval `/usr/bin/ssh-agent -k` fi root@wl ~ #
[wl]←───→[wl2]←───→[wl3]wl을 통해 wl2에 접속하고 다시 wl2에서 wl3에 접속하는 상황을 가정해 보자. 이 경우 인증서를 이용해 접속하려면 wl과 wl2에서 키를 생성하고, wl의 공개키를 wl2에, wl2의 키를 wl3에 복사하고 설정해줘야 한다. 또한 wl2에 접속한 후 다시 ssh-agent를 실행해야 한다. 이런 불편함을 해소하기 위해 Agent Forwarding이 생겨나게 되었다.
root@wl ~ # vi /etc/ssh/ssh_config ForwardAgent yes root@wl ~ # ssh wl2 Last login: Sun Nov 8 23:29:10 2009 from wl Sun Microsystems Inc. SunOS 5.10 Generic January 2005 root@wl2 ~ # ssh wl3 Last login: Sun Nov 8 23:29:13 2009 from wl Sun Microsystems Inc. SunOS 5.10 Generic January 2005 root@wl3 ~ #
root@host ~ # vi /etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes 1)
root@host ~ # svcadm restart ssh
1) 어떠한 호스트로도 포워딩 가능. no로 설정하면 로컬호스트의 특정 포트로만 포워딩 가능 (즉 no로 설정하면 -R, -L 옵션의 protnum:hostname:portnum에서 hostname 이 localhost 만 가능해진다는 뜻이다)
root@client ~ # ssh -L 1234:localhost:80 username@remotehost 1)
Password:
1) [client]에 포트 [1234]를 열고, 이 포트로 오는 모든 트래픽은 SSH에 의해 암호화되어 [remotehost]로 전송되며, 다시 [remotehost]입장에서 [localhost]의 포트 [80]번으로 포워딩된다. [usernmae]과 [Password]는 [remotehost]의 것을 입력해야 한다. 접속 한 동안만 포워딩 된다.
root@client ~ # ssh -R 1234:localhost:23 username@remotehost 1)
Password:
1) [remotehost]에 포트 [1234]를 열고, 이 포트로 오는 모든 트래픽은 SSH에 의해 암호화되어 [client]로 전송되며, 다시 [client] 입장에서 [localhost]의 [23]번 포트로 포워딩 된다. [usernmae]과 [Password]는 [remotehost]의 것을 입력해야 한다. 접속 한 동안만 포워딩 된다.
root@sshdserver ~ # vi /etc/ssh/sshd_config 1)
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
root@sshdserver ~ # svcadm restart ssh
1) 설정을 확인해본다. 아마 되어있을 것이다.
root@client ~ # ssh -X username@sshdserver
암호:
Last login: Mon Apr 13 09:00:00 2009 from 192.168.0.x
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
root@sshdserver ~ # xclock & 1)
[xxxx]
root@sshdserver ~ #
1) xclock을 띄워본다. [client] 의 X윈도우에 [sshdserver]에서 실행한 시계가 뜨면 정상적으로 접속된 것이다.
【Client】←───인터넷───→【SSHDServer】←─→【Appserver】 │ │ └────────────방화벽에의해차단됨─────────────┘
root@client ~ # ssh -L x:appserver:y username@sshdserver
Password:
root@sshdserver ~ #
client에서 다른 세션으로 아래와 같이 접속한다.
root@client ~ # telnet localhost x 1)
1) 만약 아래와 같은 오류가 난다면, [sshdserver]의 sshd_config 설정을 확인해본다.
root@client ~ # ssh -D 1234 username@sshdserver 1)
Password:
root@sshserver ~ #
1) [client]에 포트 [1234]를 열고 이 포트로 SOCKS4 프로토콜과 호환되는 데이터가 전송되면, SOCKS4 데이터를 sshdserver로 전송해, sshdserver에서 SOCKS4 규격에 맞춰 데이터를 처리한다.
|
|
Copyright © 2004-2012 Jo HoSeok. All rights reserved. |