Secure Shell

덤프버전 :


1. 개요
1.1. 차단되는 경우
1.1.1. 원룸 및 고시원, 학생 기숙사
1.1.2. 해결 방법
2. 사용 방법
2.1. 비밀번호 없이 키로 접속하는 설정 방법
3. 예시
4. 추천 SSH 클라이언트
5. SSH Filesystem(sshfs)를 이용한 원격 폴더 마운트
6. SFTP
7. 관련 문서


1. 개요[편집]


Secure Shell, SSH

원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜. 보통 축약해서 SSH라고 부른다. 뜻 그대로 보안 셸이다. 기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷은 암호화가 이루어지지 않아 계정 정보가 탈취될 위험이 높으므로, 여기에 암호화 기능을 추가하여 1995년에 나온 프로토콜이다. # 기본 포트는 22번. 셸로 원격 접속을 하는 것이므로 기본적으로 CLI 상에서 작업을 하게 된다. 그러나, X.org가 설치된 클라이언트에서 X.org가 설치된 서버로 접속할 경우 ssh 명령어 파라미터로 -X를 주면 GUI 프로그램을 클라이언트에서 창으로 띄울 수 있다.[1] X.org는 현재 대부분 리눅스에서 사용하는 GUI 시스템이므로, 양쪽 리눅스를 GUI로 설치하면 대부분 사용 가능하다. SFTP 기능을 설정 파일(보통 리눅스에선 /etc/ssh/sshd_config)에서 활성화 하면 일부 FTP 클라이언트(FileZilla 등)에서 파일 공유를 위해 접속할 수 있다.


1.1. 차단되는 경우[편집]


다만 ISP(인터넷 제공자)나 건물(원룸, 고시원 등),기관(학교 등의 시설) 등의 정책 및 관리인에 따라 이 22번 포트를 방화벽이나 라우터 등으로 막아버리는 곳이 존재한다. 보통은 라우팅이 가능한 스위치나 공유기 등을 사용하여 모든 인바운드 연결을 막아버리는 경우가 대부분이다.


1.1.1. 원룸 및 고시원, 학생 기숙사[편집]


건물 옵션에 인터넷이 포함되었을 수는 있으나, 인터넷 주소 관리의 효율성 및 인터넷 회선 남용을 방지하기 위해 차단된다.
관리비가 매우 저렴한 원룸이나 학생 기숙사 등이 이 경우에 주로 해당한다.


1.1.2. 해결 방법[편집]


VPN을 사용하거나, 외부에 중계 서버 등을 둬서 접근을 하면된다.

허나, 아웃바운드 포트로 VPN 까지 차단한 경우에는 방법이 없다.
보통 22번 포트를 막았다면 20(FTP), 21(FTP, FTPS), 23(TELNET), 25(SMTP), 53(DNS), 80(HTTP), 123(NTP), 443(HTTPS), 3389(RDP), 5900(VNC) 포트도 막혀 있다.
추가로, SSH 포트(22번)만 살아있다면 SSH Tunneling을 사용해서 방화벽으로 막은 사이트를 접근할 수 있다.


2. 사용 방법[편집]


먼저 서버에 SSH 서버를 설치해야 한다. 리눅스의 경우 대부분 배포판의 저장소에서 제공하므로 손쉽게 구할 수 있다.
설치되어 있지 않을 경우, 우분투 또는 일부 데비안 OS라면
sudo apt install openssh-server
로 설치할 수 있다.
macOS의 경우 시스템 환경설정 > 공유 > 원격 로그인을 활성화하면 바로 SSH 서버가 작동한다.
윈도우 10의 경우에도 추가로 설치할 수 있는 기능으로 OpenSSH 서버를 제공하고 SSH 클라이언트는 기본 설치되어 있기 때문에 Windows로도 SSH에 접속할 수 있다.


2.1. 비밀번호 없이 키로 접속하는 설정 방법[편집]


컴퓨터가 켜져 있고 절전모드가 아니어야 접속이 가능하므로 절전모드를 끄고, WOL를 미리 설정하자
Git bash을 설치
Window10 설정 → 앱 → 앱 및 기능 → 선택적 기능 관리 → OpenSSH 서버 설치, OpenSSH 클라이언트는 기본적으로 설치되어 있음,
OpenSSH 서버는 접속을 허용할 컴에는 필수로 설치, 원격접속만 할 거라면 설치를 안해도 무방

Git bash를 열고
cd C:/

ssh-keygen -t rsa

화면 출력
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which you want to save the key (/home/unity/.ssh/id_rsa):

이후에는 모두 넘긴다.

올바르게 입력했으면 다음과 같은 화면 출력이 나온다. 안나오면 다시해야 됨
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which you want to save the key (/home/unity/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match. Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/HJ/.ssh/id_rsa.
Your public key has been saved in /c/Users/HJ/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ou4e62FYd0vQAcwNqsLc94nCRJpyNSLV+c6cxmY09fk (내 컴퓨터 계정 이름)@DESKTOP-H26****
The key's randomart image is:
+---[RSA 2048]----+
|   .. +o+. |
|  .  o.o.o. |
| . ..+..... . |
| o.=+ .+.  o |
| o=oo.BooS  . |
| .ooo.o%+..  E |
|   .o== o. |
|    o.+ |
|    +* |
+----[SHA256]-----+


다음으로
$ cat id_rsa.pub >> ~/.ssh/authorized_keys|

를 입력하고 엔터를 누른다.

cd ~/.ssh
ls -l id_rsa*
cat id_rsa.pub

입력하면 공개키가 나오는데 이 공개키를 서버(접속을 허용 할 컴퓨터)로 보내야 한다.

1.scp명령어 활용
클라이언트에서
scp $HOME/.ssh/id_rsa.pub (계정)@(받을 컴퓨터의 IP나 도메인):id_rsa.pub


서버에서
cat id_rsa.pub >> authorized_keys

를 입력하면 authorized_keys 파일이 생긴다.

2. 아까 나온 공개키를 복사해서 메일같은 걸로 보낸다.

서버에서 받은 키를 복사한 다음에
cat >> authorized_keys

를 입력하고 엔터치면 밑에 줄로 가는데 그곳에 복사한 공개키를 붙여넣는다.(단축키 Shift+Ins) 그리고 엔터를 누르면 authorized_keys 파일이 생긴다.

접속하는 컴퓨터의 d_rsa.pub파일과 접속 받는 컴퓨터의 authorized_keys 파일의 내용이 같아야 비밀번호의 인증없이 연결이 가능하다
authorized_keys = id_rsa.pub


그리고 이제 방화벽을 해제해야한다.
제어판 → Window Defender 방화벽 → 좌측 상단 고급설정 →인바운드&아웃바운드 규칙

인바운드는 내가 들어 갈때 아웃바운드는 남이 들어 올때를 의미한다.

새규칙을 누르고, 포트를 누른다.
TCP누르고, 특정 원격포트 그리고 옆칸에 자신이 원하는 포트를 입력한다. 22번 포트를 추천한다.
다음 누르고, 연결허용 누르고. 다음누르면 이름을 설정하라고 하는데 아무이름을 지으면 된다. 추천은 22 TCP

같은 방법으로 인바운드도 작업한다.(인바운드는 모두 여는게 편하다.)

외부망 일경우 대상컴퓨터에서 네이버에 접속하여 "내 아이피"라고 검색하면 나오는 숫자 ex)123.123.123.123의 주소를 서버주소에 입력한다.
대상컴퓨터가 공유기를 사용하지 않을 경우에는 이대로 하면 되지만 공유기나 모뎀을 사용 하는 경우는 복잡해 진다.

모뎀을 사용한다면 모뎀제조업체 혹은 모뎀을 대여해 준 통신사에 전화해서 모뎀에 포트가 열려있는지 확인 하고 닫혀있으면 열어달라고 요청해야한다.

공유기에서는 포트포워딩이나 DMZ 또는 Twin-ip나 S-DMZ를 설정 해야 한다.

공유기의 내부 아이피를 입력하여 공유기 관리자 페이지에 접속하고 NAT설정에 들어가 포트포워딩이나 DMZ 또는 Twin-ip나 S-DMZ를 설정한다.

1. 포트포워딩은 공유기에 DHCP때문에 컴퓨터에 사설아이피가 수시로 바뀜으로 DHCP설정에 들어가 IP를 고정해야 한다. 그리고 여는 포트는 통신규칙 TCP 여는 포트는 아무거나 해도 되지만 22를 추천한다.
왜냐하면 다른 포트를 설정하면 접속할 때 ssh (접속할 대상의 컴퓨터에 로그인 된 계정이름)@(서버주소) -p (자신이 연 포트)로 입력해야 한다.

2. DMZ는 컴퓨터에 모든 포트를 여는 설정이다. 하지만 공유기에 DHCP때문에 컴퓨터에 사설아이피가 수시로 바뀜으로 DHCP설정에 들어가 IP를 고정해야 한다.

3. Twin-ip는 쉽게 생각하면 컴퓨터에 렌선을 바로 꽂아 사용하는 것과 비슷하다고 할 수 있다.
다만 S-DMZ와 다르게 사설아이피와 공인아이피로 아이피가 나뉘에 져 있기 때문에 내부에서 접속 할 때는 사설아이피로 접속 해야 한다. 이 때문에 모든 포트가 자동으로 열리며 DHCP설정을 할 필요가 없다.

4. S-DMZ는 Twin-ip와 비슷하지만 공인아이피와 사설아이피가 합쳐저 사용된다. 이 때문에 모든 포트가 자동으로 열리며 DHCP설정을 할 필요가 없다. 따라서 서버열기에는 가장 좋다고 할 수 있다.

그리고 이론적으로 상대방의 아이피만 알면 그 컴퓨터를 해킹 할 수 있기 때문에 애당초 고정IP를 쓰는 게 아니라면 되도록 도메인을 사용하여 자신의 IP를 숨기고, 공인 아이피가 보통 바뀌지는 않는다고 하지만 가끔식 바뀌는 경우가 있음으로 no-ip 등의 무료DDNS서비스를 이용하자.

이제 ssh설정은 끝났고 접속은 ssh (접속할 대상의 컴퓨터에 로그인 된 계정이름)@(서버주소)
이때 서버주소는 접속할 대상이 되는 컴퓨터의 IP주소나 도메인이다.

만약 같은 공유기를 사용하는 내부망이면 서버컴퓨터에서 Window키 + R를 누르고 cmd를 입력하여 나오는 도스창에 ipconfig를 입력하여 나오는 IPv4주소를 입력하면 된다.
도스창에
Microsoft Windows [Version 10.0.17134.285]
(c) 2018 Microsoft Corporation. All rights reserved.

(자신의 컴퓨터 계정 이름)@DESKTOP-H26**** C:\Users\(자신의 컴퓨터 계정 이름)>

이렇게 출력하면 성공 한 것이다.

이렇게 SSH접속을 하면 도스창 화면이 한 번 초기화되어 검은 도스창만이 반길 것이다. 이게 제대로 연결된 것 이다.
도스창은 절대 닫으면 안된다. 닫아 버렸다면 다시 ssh (접속할 대상의 컴퓨터에 로그인 된 계정이름)@(서버주소) 입력하자
연결된 도스창은 서버컴의 도스창으로 이를 이용 해서 컴퓨터를 제어 할 수있고 자신이 도스를 잘 다루지 못한다면 VNC를 이용하자.

프로그램을 깔고 접속할 대상의 ip또는 도매인을 입력하고 암호를 입력하면 된다.

클라이언트에서 접속할 경우 윈도우라면 PuTTY를 일반적으로 사용하고, 상황이 좀 나은 곳이라면 유료 소프트웨어인 Xshell을 쓰기도 한다. macOSGNOME이나 KDE가 설치된 리눅스는 기본으로 설치되어 있는 터미널에서 ssh 명령어로 접속하면 된다. 보통 ssh (사용자 이름)@(서버 도메인 주소 or IP 주소)의 형태로 입력하면 된다.[2]


3. 예시[편집]


가령
example.com
에 접속한다고 치면, 일반적인 클라이언트에서는 보통
호스트
사용자 이름
포트
example.com
root[3]
22
이렇게 하면 된다. 가장 줄인게 이거고, 보통은 비밀번호 등이 추가로 요구된다. 또한 리눅스 터미널에서는
ssh [email protected]
등으로 접속이 가능하다. 이것도 대부분 비밀번호[4] 등이 요구된다. GitHubGitLab과 같은 곳은 SSH 키를 사용한다. 이 키에는 비밀번호, 식별 이메일 등이 있으며 서버 측은 공개 키만 식별한다. 애초에 개인 키는 공개되어서는 안된다.


4. 추천 SSH 클라이언트[편집]


예전에는 SSH을 지원하는 터미널을 써야 SSH 통신으로 서버에 접속할 수 있었지만, 현재 윈도우를 포함한 거의 모든 OS가 자체적으로 SSH을 지원하고 있다. (Windows 10의 경우 1809 업데이트 이후)
따라서 사실상 대부분의 터미널 프로그램에서 SSH 통신을 할 수 있다. 심지어 확장 기능을 지원하는 텍스트 에디터에서도 해당 기능을 설치하면 SSH통신이 가능하다.




5. SSH Filesystem(sshfs)를 이용한 원격 폴더 마운트[편집]


SSH connection 기반으로 원격 서버를 로컬 파일 시스템으로 마운트할 수 있다. 우분투 20.04 버전에서도 sshfs을 설치 가능하며, /etc/fstab 을 수정하여 원격 서버의 폴더를 마치 로컬 폴더처럼 사용이 가능하다.

윈도우에서는 sshfs 설치는 sshfs-WinWinFsp 설치하면 원격 드라이브 연결이 가능하다. 프로그램 설치 후 Windows 커맨드에서 net use 명령어 실행하고 원격 서버의 패스워드를 입력하면 원격 드라이브가 연결된다. Win10 설치기에 의하면 네트워크 드라이브가 읽기 전용으로 마운트된다고 한다. 이는 네트워크 보안 정책의 문제인지, sshfs-win의 문제인지 확인이 필요하다.

###윈도우 sshfs mount 명령어###
net use y: \\sshfs\[your id]@192.168.XXX.XXX!22\[your id] /user:[your id]



6. SFTP[편집]


셸이 아닌 파일 교환의 용도로 일부 FTP 클라이언트에서도 접속 가능하다.[5] FTP보다 보안이 강화되어 있으나, FTP에 암호화 기능을 추가한 FTPS와는 다르다.

7. 관련 문서[편집]


파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-03 13:54:26에 나무위키 Secure Shell 문서에서 가져왔습니다.

[1] 물론 그 프로그램 이름을 셸 상에 쳐주긴 해야 한다.[2] Git에서도 이 형식의 SSH를 지원한다. 주로 clone과 push에서 사용한다. GitHub 같은 대규모 Git 저장소에서는 SSH 키를 등록하고 사용하면 된다.[3] 이건 어디까지나 예시를 위해서 이렇게 설정한 거고, 실제로 프로덕션 서버에 root로 로그인하면 큰일난다. 오죽하면 주요 배포판의 SSH 서버의 기본 설정이 루트 로그인 금지일 정도. 왜인지는 root 문서와 sudo 문서 참조. [4] 비밀번호가 없을 수도 있다. 하지만 root는 비밀번호가 없으면 root와 관련된 명령어(ssh 포함)를 못 쓴다. 혹은 비밀번호가 아닌 인증서를 통한 로그인을 하기도 하는데, Amazon Web Services가 대표적.[5] 당연히 SFTP 기능을 활성화시켜야 한다.