리눅스 ssh 접속 명령어 - linugseu ssh jeobsog myeonglyeong-eo

윈도우컴퓨터에서 리눅스서버에 ssh로 원격접속하는 예시는 다음과 같다. 명령프롬프트 창을 띄운 후

$ ssh  -p 8080
ssh: 원격접속 명령어
hibiscircus: 계정이름
224.236.210.291: 서버의 고정 IP
-p: 포트번호 지정 시 사용 (사용 안할 시 default값은 22) 현재 서버가 포트를 8080번을 열어두었다는 가정 하에 설정

이후 서버의 비밀번호를 입력하면 접속이 가능하다. 번거로울 수 있다. 비밀번호 없이 접속하는 방법과 간편 접속하는 방법을 알아보자.

1. 비밀번호 없이 접속하는 방법

1-1. git bash 접속하기

 window에서 많이 사용하는 명령프롬프트 cmd창을 사용하면 unix기반의 shell script를 사용하지 못하기 때문에 window에서 shell scirpt를 사용할 수 있는 git을 설치해야 한다. 언제 설치하였는지는 모르겠지만 git bash가 이미 설치되어 있어서 접속하였다. 

리눅스 ssh 접속 명령어 - linugseu ssh jeobsog myeonglyeong-eo

먼저 홈 디렉토리로 이동한다.

$ cd ~

1-2. ssh-key 생성하기

다음의 명령어를 입력하여 ssh-key를 생성한다.

$ ssh-keygen

그러면 다음과 같이 먼저 어느 path에 저장할 것인지 설정하는 질문이 나온다.

리눅스 ssh 접속 명령어 - linugseu ssh jeobsog myeonglyeong-eo

Enter를 통해 그냥 넘어갈 수 있다. (이럴 경우 홈 디렉토리 아래에 바로 만드는 것이다.)

다음으로 비밀번호를 설정하는 질문이 나오는데 이것도 엔터로 그냥 넘어갈 수 있다.

그러면 .ssh 디렉토리가 생성되며 그 하위에 id_rsa, id_rsa.pub이라는 파일이 2개 생성된다.

id_rsa: 개인키
id_rsa.pub: 공개키

1-3. 직접 윈도우 컴퓨터의 공개키 리눅스 서버에 옮기기

직접 윈도우 컴퓨터의 공개키를 서버에 등록시킬 경우 예시는 다음과 같다.

$ scp -P 22 ~/.ssh/id_rsa.pub :~/
scp: shell에서 서버로 전송하는 명령어
~/.ssh/Id_rsa.pub: 서버로 전송하는 파일 (경로포함)
hibiscircus: 계정이름
224.236.210.291: 서버의 url 주소이다. (도메인 주소 예를 들어 ~.com과 같은 형태로 등록하였다면 가능하다.)
~/: 서버의 다운로드 받을 디렉토리 위치

1-4. 서버에 접속하여 authorized_key에 공개키 추가하기

맨 처음 서버에 원격접속한 명령어를 통해 접속한 후

$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

다음의 명령어를 통해 authorized_keys 파일에 윈도우 컴퓨터의 공개키(id_rsa.pub)를 입력시킨다.

확인해보면 비밀번호 입력없이 접속이 가능하다. 이제 아주 간단한 명령어로 리눅스 서버에 접속하도록 해보자.

2. 비밀번호 없이 접속하는 방법

2-1. config 파일 만들기

리눅스 서버에 접속할 때 실행시킬 config파일을 vi를 통해 만들어준다.

$ vi config

2-2. config 파일에 리눅스서버 정보 입력하기

입력 시킬 내용은 다음과 같다. (예시이기에 가상으로 만든 것들입니다.)

Host mouse
	HostName 224.236.210.291
    	User hibiscircus
    	Port 8080
    	IdentityFile ~/.ssh/id_rsa
Host: 간단하게 접속할 때 쓸 별명을 지정
HostName: 리눅스 서버의 고정 IP
User: 리눅스 서버의 계정
Port: 리눅스 서버에서 열린 포트번호
IdentityFile: 비밀번호 없이 접속할 때 id_rsa를 참조하도록 하는 것이다. 이를 위해 id_rsa의 경로와 함께 입력한다.

저장을 해준다. (esc누른 후 :wq!)

리눅스 ssh 접속 명령어 - linugseu ssh jeobsog myeonglyeong-eo

이제 다음과 같은 간단한 명령어로 윈도우컴퓨터에서 리눅스서버로 원격접속이 가능하다.

$ ssh mouse

-히비스서커스-

리눅스 ssh 접속 명령어 - linugseu ssh jeobsog myeonglyeong-eo
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 접속 명령어 - linugseu ssh jeobsog myeonglyeong-eo
ssh 패키지 확인

openssh : openssh의 서버와 클라이언트에 모두 필요한 핵심파일이 들어있는 패키지이다.

openssh-server : 서버관련 패키지로 데몬인 sshd, sftp 서버 등이 있다.

openssh-clients : 클라이언트 관련 패키지로 ssh, scp, sftp 등이 들어있다.

ssh 서버에서 사용하는 기본설정

ssh가 설치되어있는 서버에서 설정과 관련된 파일은 /etc/ssh/sshd_config 가 있다.

리눅스 ssh 접속 명령어 - linugseu ssh jeobsog myeonglyeong-eo
vim sshd_config

ssh와 관련된 여러 설정항목은 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 이름으로 복사한다.