윈도우컴퓨터에서 리눅스서버에 ssh로 원격접속하는 예시는 다음과 같다. 명령프롬프트 창을 띄운 후
ssh: 원격접속 명령어 이후 서버의 비밀번호를 입력하면 접속이 가능하다. 번거로울 수 있다. 비밀번호 없이 접속하는 방법과 간편 접속하는 방법을 알아보자. 1. 비밀번호 없이 접속하는 방법1-1. git bash 접속하기window에서 많이 사용하는 명령프롬프트 cmd창을 사용하면 unix기반의 shell script를 사용하지 못하기 때문에 window에서 shell scirpt를 사용할 수 있는 git을 설치해야 한다. 언제 설치하였는지는 모르겠지만 git bash가 이미 설치되어 있어서 접속하였다. 먼저 홈 디렉토리로 이동한다.
1-2. ssh-key 생성하기다음의 명령어를 입력하여 ssh-key를 생성한다.
그러면 다음과 같이 먼저 어느 path에 저장할 것인지 설정하는 질문이 나온다. Enter를 통해 그냥 넘어갈 수 있다. (이럴 경우 홈 디렉토리 아래에 바로 만드는 것이다.) 다음으로 비밀번호를 설정하는 질문이 나오는데 이것도 엔터로 그냥 넘어갈 수 있다. 그러면 .ssh 디렉토리가 생성되며 그 하위에 id_rsa, id_rsa.pub이라는 파일이 2개 생성된다. id_rsa: 개인키 1-3. 직접 윈도우 컴퓨터의 공개키 리눅스 서버에 옮기기직접 윈도우 컴퓨터의 공개키를 서버에 등록시킬 경우 예시는 다음과 같다.
scp: shell에서 서버로 전송하는 명령어 1-4. 서버에 접속하여 authorized_key에 공개키 추가하기맨 처음 서버에 원격접속한 명령어를 통해 접속한 후
다음의 명령어를 통해 authorized_keys 파일에 윈도우 컴퓨터의 공개키(id_rsa.pub)를 입력시킨다. 확인해보면 비밀번호 입력없이 접속이 가능하다. 이제 아주 간단한 명령어로 리눅스 서버에 접속하도록 해보자. 2. 비밀번호 없이 접속하는 방법2-1. config 파일 만들기리눅스 서버에 접속할 때 실행시킬 config파일을 vi를 통해 만들어준다.
2-2. config 파일에 리눅스서버 정보 입력하기입력 시킬 내용은 다음과 같다. (예시이기에 가상으로 만든 것들입니다.)
Host: 간단하게 접속할 때 쓸 별명을 지정 저장을 해준다. (esc누른 후 :wq!) 이제 다음과 같은 간단한 명령어로 윈도우컴퓨터에서 리눅스서버로 원격접속이 가능하다.
-히비스서커스- SSH (Secure Shell) 를 쓰는 이유 SSH는 원격으로 다른 시스템에 로그인할 수 있는 대표적인 프로그램으로, 특히 다중접속을 허용하는 리눅스에서는 하나의 서버에서 여러 클라이언트에 접속해 관리해야 하는 경우가 많다. 이럴때 SSH와 같은 원격프로그램은 유용하게 쓰인다. 기본적으로 리눅스에서 다른 시스템으로 원격 로그인할 수 있는 방법에는 대표적으로 SSH와 telnet을 떠올릴 수 있으며 두 가지는 사용법이 유사하다. telnet은 원격으로 연결된 서버와 클라이언트 간의 데이터를 전송할 때 일반 텍스트 형식으로 전달하여 패킷을 도중에 누군가 도청할 경우 내용을 유출당할 수 있다. SSH란 SSH는 패킷 전송시 암호화해서 전송하므로 안전하게 전송할 수 있고, 혹여나 도청당하더라도 암호화 된 파일을 도청해봤자 그 내용을 알기는 힘들다. 리눅스의 여러 배포판에서는 openssh (데몬명 : sshd)라는 패키지를 이용해서 사용한다. openssh의 설정파일 = /etc/ssh/sshd_config sshd 데몬 실행 스크립트 = /etc/rc.d/init.d/sshd 기본적으로 ssh는 명령어를 통해 서버와 클라이언트가 별도의 보안채널을 형성한 뒤 사용한다. 이후에는 따로 로그인을 하지 않고도 파일을 가져오는 sftp프로그램과 파일을 복사하는 scp 기능 원격으로 shell을 사용하는 rsh기능 등을 사용할 수 있다. SSH 특징 1. 암호화된 패킷을 전송 SSH에서는 기본적으로 패킷을 포함한 전송하는 모든 트래픽을 암호화해서 전송한다. 이는 도청이나 세션 하이재킹, 패킷 스니핑 등 보안공격을 방지헤는데 효과적이라서 보안성이 뛰어나다는 평을 받는다. 2. 클라이언트와 서버라는 관계가 존재한다. SSH를 사용할 때 두 패키지 (ssh_server, ssh_client) 사이에 TCP라는 보안채널을 별도로 생성한다. 이 보안채널을 통해 서로를 인증한 뒤, 서버가 클라이언트를 인증할 수 있도록 여러 프로그램을 호출한다. 보안채널이 형성되고 나면 클라이언트 에서는 여러개의 세션을 사용할 수 있다. 3. sftp를 지원한다. 연결된 두 시스템 간의 안전한 파일전송을 위해서 sftp 기능을 지원한다. 서버에 접속할 계정과 해당 파일의 위치만 알고있다면 sftp를 이용해서 서버에 있는 파일을 가져와 사용할 수 있다. ]# sftp://[계정명]@[ip주소][파일경로] 서버에 해당 계정을 이용해 파일을 클라이언트 측으로 가져올 수 있다. 4. 패스워드 없이 로그인이 가능하다. 초기에 서버와 클라이언트는 계정명과 ip주소를 입력한 뒤 passwd를 요구한다. 이후에 원격접속을 시도할 때는 별도의 passwd 없이 바로 로그인할 수도 있다. 5. scp (원격복사 기능) 서버와 클라이언트 사이에 로그인하지 않고도 scp를 이용해 원격으로 파일을 복사할 수 있는 기능이다. ]# scp [복사될 파일명] [원격지 ip주소]:[파일] 위 형식으로 원격지에 있는 파일을 클라이언트 측에 원하는 위치에 복사할 수 있다. SSH 설치 리눅스에서는 ssh의 공개버전인 openssh를 사용한다. ssh서버와 클라이언트 프로그램으로 나누어져 있다. 레드햇 계열의 리눅스에서는 3개의 패키지로 구분해서 배포하고 있다. ssh 패키지 확인openssh : openssh의 서버와 클라이언트에 모두 필요한 핵심파일이 들어있는 패키지이다. openssh-server : 서버관련 패키지로 데몬인 sshd, sftp 서버 등이 있다. openssh-clients : 클라이언트 관련 패키지로 ssh, scp, sftp 등이 들어있다. ssh 서버에서 사용하는 기본설정 ssh가 설치되어있는 서버에서 설정과 관련된 파일은 /etc/ssh/sshd_config 가 있다. vim sshd_configssh와 관련된 여러 설정항목은 sshd_config에서 확인할 수 있다. 설치되어있는 ssh의 기본적인 설명 포트번호와 함께 명령어의 PATH 경로가 나타나 있고, RSA, DSA 등 암호화방식에 관한 설명과 log의 기록 방법 등을 설정할 수 있다. 서버의 환경설정 파일 sshd_config 파일의 주요항목은 아래와 같다. Port 22 = ssh 서버에서 사용하는 포트 지정 AddressFamily any = 접속하는 IP주소의 버전을 지정한다. any는 IPv4와 IPv6 모두 접속이 가능하다. ListenAddress 0.0.0.0 ListenAddress :: = sshd 데몬이 허가하는 주소를 설정하는 영역이다. 여러 네트워크대역이 있을 때 IP대역과 포트를 지정할 수 있다. 0.0.0.0은 IPv4 버전을 지정하고, IPv6은 콜론(::)을 사용한다. Protocol 2 = ssh 프로토콜의 버전을 지정한다. HostKey /etc/ssh/ssh_host_key = ssh2의 호스트 키 위치를 지정한다. HostKey /etc/ssh/ssh_host_rsa_key = ssh2의 RSA 암호화방식에서 사용하는 호스트 키 위치를 지정한다. HostKey /etc/ssh/ssh_host_dsa_key = ssh2에서 DSA 암호화방식에 사용하는 호스트 키 위치를 지정한다. KeyRegenerationlnterval 1h = 서버는 암호화키를 이용해 접속하고 나면 해당 키는 자동으로 다시 만들어진다. 이는 암호화키를 복제해서 악용하지 못하도록 하기 위함인데, 이 옵션은 키의 재생성 여부를 설정할 수 있다. (0 = 재생성 X / 1h = 1시간 / 1m = 1분) ServerKeyBits 1024 = 서버 키의 비트수 지정 SyslogFacility AUTHPRIV = syslog와 관련된 facility를 지정하는 항목이다. ssh를 통한 접속은 authpriv 형식으로 log를 기록한다. (facility : 로그를 발생시키는 프로그램의 유형) (authpriv : 인증을 필요로하는 프로그램이 발생시키는 메시지) LogLevel INFO = 로그레벨을 지정하는 항목이다. 기본값은 INFO이며, 그 외에 QUIET (기록X), FATAL (위험한 오류), ERROR, DEBUGS 등이 있다. (INFO 로그는 통계나 기본적인 정보메시지를 뜻한다.) LoginGraceTime 2m = 로그인에 실패한 유저가 발생한 경우, 서버가 연결을 중단하는 시간이다. (0이면 제한이 없고, 2m은 2분을 말한다.) PermitRootLogin yes = ssh를 통한 원격 로그인 사용자가 root로 로그인할 때 허용여부를 결정한다. StrictModes yes = 로그인을 허용하기 전, 파일모드나 사용자의 홈디렉터리, 원격호스트파일을 SSH 데몬이 체크할 수 있도록 해주는 설정이다. MaxAuthTries 6 = 접속 실패시 재시도할 수 있는 횟수를 지정한다. MaxSessions 10 = 네트워크 주소(접속ip주소)당 최대 연결할 수 있는 세션 수를 지정한다. 현재 10으로 설정되어, 하나의 ip로 원격 접속한 창을 최대 10개까지 사용할 수 있다. RSAAuthentication yes = RSA 인증의 사용여부 PubkeyAuthentication yes = 공개키를 통한 인증의 사용여부 AuthorizedKeysFile .ssh/authorized_keys = 클라이언트에서 생성한 공개 키를 저장할 파일명 지정 PasswordAuthentication yes = 패스워드를 이용한 인증을 허용한다. KerberosAuthentication no KerberosOrLocalPasswd yes KerberosTicketCleanup yes KerberosGetAFSToken no KerberosUseKuserok yes = Kerberos 인증 관련 설정 GSSAPIAuthentication yes GSSAPICleanupCredentials yes = GSSAPI 인증 관련 설정 UsePAM yes = PAM을 통해 제어할 것인지 설정 Compression yes = 압축의 허용여부 설정 UseDNS yes = 클라이언트의 호스트주소를 ip로 해석할 것인지 설정 PidFile /var/run/sshd.pid = ssh 데몬의 PID를 기록하는 파일 Banner none = 배너 관련 설정으로 로그인 전에 보여주는 메시지파일을 지정한다. Subsystem sftp /usr/libexec/openssh/sftp-server = 보안 ftp 프로그램으로 sftp 서버를 사용하기 위한 설정이다. 이외에도 X11관련 설정이나 프로세스의 관리방식 등 설정할 수 있는 방법은 다양하다. 원하지 않는 설정은 '#' 문자를 통해 주석처리하는 방식으로 이용하면 된다. ssh 명령어 사용법 리눅스에서는 openssh-clients 패키지를 설치하면 ssh를 이용해 다른 시스템에 원격으로 접속할 수 있다. ▷ 형식 ]# ssh [호스트명 or ip주소] = ssh를 사용할 때 현재 사용중인 계정으로 다른 시스템에 접속을 시도하게 된다. 서버와 클라이언트의 계정이 같을 경우에는 생략해도 되는 명령이다. ]# ssh [계정명]@[호스트이름] = 클라이언트와 서버의 계정이 다를 때 계정이름을 명기하는 방법이다. ]# ssh 호스트네임 명령 = 원격으로 서버의 프로그램만 사용할 때, 접속하진 않고 명령만 내릴때 사용한다. ▷ 사용 예시 ]# ssh = user라는 계정으로 192.168.1.10 서버에 접속을 시도한다. ]# ssh -l other 192.168.1.10 = 현재와는 다른 계정인 other로 192.168.1.10 서버에 접속을 시도한다. ]# ssh -p 180 192.168.1.10 = 기본포트는 22번 이지만 180번 포트로 192.168.1.10 서버에 접속을 시도한다. ]# ssh -l other hostname mkdir test = other 계정으로 hostname 이라는 곳에 접속해서 mkdir test 명령을 내린다. ]# sftp:///tmp/test = other계정으로 192.168.2.20 서버에 접속해서 /tmp/test 파일을 가져온다. ]# scp /tmp/test 192.168.2.20:/tmp/aaa = 192.168.2.20 서버에 있는 aaa 파일을 클라이언트 측에 /tmp/test 이름으로 복사한다. |