
ssh(Secure Shell)
1. ssh의 개요
- ssh는 원격 시스템에 로그인하여 명령을 실행하는 프로그램
- 기본적인 사용법은 telnet과 유사
- telnet은 클라이언트와 서버 간의 데이터 전송 시에 일반 텍스트 형태로 패킷을 전달하여 패킷의 내용을 유출당할 수 있지만, ssh는 패킷 전송 시 암호화시키므로 안전하게 전송할 수 있음
- ssh는 ssh2와 ssh1 두버전이 있는데 ssh2는 ssh1을 개선한 것으로 호환은 되지만 기본적으로 호환성을 포함하고 있는 것이 아니므로 ssh1을 지원하려면 ssh1 서버 같이 운영해야 함
- SSH2는 이중-암호화 RSA 키 교환을 비롯하여 다양한 키-교환 방법을 지원
2. ssh의 특징
- 패킷을 암호화하여 다른 원격 로그인 프로그램인 telnet이나 rlogin에 비해 안전
- rlogin처럼 패스워드 입력 없이 로그인할 수 있음
- rsh처럼 원격 셸을 지원
- 원격 복사(scp)을 지원
- 안전한 파일 전송(sftp)을 지원
3. ssh 설치
- 리눅스에서는 ssh의 공개 버전인 openssh를 사용
- SSH 서버와 SSH 클라이언트 프로그램으로 나누어져 있음
- 레드햇 계열 리눅스에서는 3개의 패키지로 구분해서 배포하고 있음
| 패키지명 | 설명 |
| openssh | openssh서버와 openssh 클라이언트에 모두 필요한 핵심적인 파일들이 들어있는 패키지로 ssh-keygen 명령이 들어있음 |
| openssh-server | openssh 서버 관련 패키지로 데몬인 sshd, sftp 서버 등이 들어있음 |
| openssh-clients | openssh 클라이언트 관련 패키지로 ssh, scp, sftp 등의 명령어가 들어있음 |
4. ssh 서버 설정
- ssh 서버의 환경 설정 파일 : /etc/ssh/sshd_config
- 실행 명령 : systemctl start sshd.service
[sshd_config 파일의 주요 항목]
- Port 22
- ssh 서버가 사용하는 포트를 지정
- #AddressFamily any
- 접속하는 IP 주소 버전을 지정하는 옵션으로 any는 IPv4와 IPv6 주소 체계 모두 접속이 가능
- 앞에 있는 주석을 제거하고 any 대신에 inet이라고 설정하면 IPv4 주소만 접속 가능하고 inet6라고 설정하면 IPv6 주소만 접속이 가능
- #ListenAddress 0.0.0.0
- #ListenAddress ::
- sshd 데몬이 허가하는 주소를 설정하는 영역으로 여러 개의 네트워크 인터페이스가 있을 경우 IP 대역과 포트를 지정할 수 있음
- “ListenAddress 192.168.1.1:22” 형태로 지정하고, 콜론(:)은 IPv6 주소 체계에서 사용하면 됨
- Protocol 2
- ssh 프로토콜의 버전을 지정
- HostKey /etc/ssh/ssh_host_key
- SSH1의 호스트키 위치를 지정
- SyslogFacility AUTHPRIV
- syslog 관련하여 facility를 지정하는 항목으로 ssh를 통한 접속은 AUTHPRIV로 처리하여 기록
- PermitRootLogin yes
- root 사용자의 로그인 허용 여부를 결정
- yes는 root로 접속이 가능하다는 의미로 보안을 강화하기 위해서는 no로 바꿈
- AuthorizedKeysFile .ssh/authorized_keys
- 클라이언트에서 생성한 공개키를 저장할 파일명을 설정
- PasswordAuthentication yes
- 패스워드를 이용한 인증을 허용
- 기본 값이 yes
5. ssh 클라이언트 명령어 : ssh
- openssh-clients 패키지를 설치하면 ssh 명령을 이용해서 접속할 수 있고, 윈도우에는 SecureCRT, Xshell 등과 같은 프로그램을 이용해야 함
# ssh는 서버로 접속할 때에 같은 계정으로 접속을 시도하므로 클라이언트와 서버의 계정이 같으면 생략해도 됨
ssh [option] 호스트명 or IP_주소
# -l 옵션 대신에 사용하는 방법으로 클라이언트 계정과 서버의 계정이 다르면 계정 이름을 명기해야 함
ssh 계정이름@호스트네임
# rsh와 같이 원격 셸을 사용할 수 있는데, 접속없이 명령만 내릴 때 유용
ssh 호스트네임 명령
옵션
| 옵션 | 설명 |
| -l | 다른 계정으로 접속할 때 사용 이 옵션 대신 서버 주소 앞에 @를 붙여 사용할 수 있음 |
| -p | ssh 서버의 포트가 22번이 아닌 경우 -p 옵션을 사용해서 바뀐 포트를 지정할 때 사용 |
사용 예
- 192.168.56.124 서버로 클라이언트의 계정과 같은 posein으로 접속을 시도. 처음 접속하는 경우에는 관련 키 생성을 위해 yes라고 입력하고 원격지 서버의 패스워드를 입력하면 접속됨
[posein@www ~]$ ssh 192.16856.124
- 192.168.1.1 서버로 클라이언트의 계정과 다른 계정인 yuloje로 접속을 시도
[posein@www ~]$ ssh -l yuloje 192.168.1.1
- 192.168.1.1 서버에 yuloje라는 계정으로 접속을 시도
[posein@www ~]$ ssh yuloje@192.168.1.1
- 192.168.1. 서버의 ssh 포트 번호가 180번인 경우에 사용
[posein@www ~]$ ssh -p 180 192.168.1.1
- 원격에서 posein.org에 yuloje라는 계정으로 접속하여 data 라는 디렉터리를 생성
[posein@www ~]$ ssh -l yuloje posein.org makedir data
6. 인증키를 이용한 SSH 서버 접속 : ssh-keygen
- SSH 서버를 접속할 때 패스워드를 입력하여 접속하지만, 별도의 인증키를 이용하여 접속할 수 있음
- SSH 클라이언트에서 ssh-keygen 명령을 이용해서 비밀키와 공개키를 생성하고, SSH 서버에 공개키를 복사하면 됨

ssk-keygen [option]
옵션
| 옵션 | 설명 |
| -t | 사용할 암호화 알고리즘을 지정하는 옵션으로 rsa, dsa 등을 사용할 수 있음 ssh2 버전에서는 지정하지 않으면 rsa를 사용 |
사용 예
- DSA를 이용해서 인증키를 생성
ssh-keygen -t dsa
- 기본적으로 RSA를 이용해서 인증키를 생성. id_rsa와 id_rsa.pub 두개의 파일이 생성되며, 패스워드를 별도로 설정하지 않으면 서버에 접속할 때 패스워드 없이 로그인 가능. 생성된 파일 중에 공개키 파일에 해당하는 id_rsa.pub 파일을 원격지 서버의 홈 디렉터리 안에 .ssh/authorized_keys로 복사하면됨
ssh-keygen
💡 원격 셸 및 scp를 이용해서 작업
1. 원격지에 .ssh 디렉터리를 생성하고 scp를 이용해서 공개키를 복사
ssh 192.168.56.124 mkdir -m 700 .ssh scp .ssh/id_rsa.pub 192.168.56.124:.ssh/authorized_keys
2. ssh 명령으로 접속
ssh 192.168.56.124
7. 원격지 공개키 복사 : ssh-copy-id
- ssh-keygen으로 생성된 공개키 파일 (ex. id_rsa.pub)을 원격지 서버의 홈 디렉터리 내에 인증키 파일로 복사하는 명령
- 관련 파일인 authorized_keys 파일이 존재하지 않는 경우에는 생성하고, 존재하는 경우에는 관련 정보만 출력
ssh-copy-id [option] 공개키_파일 원격지_주소
옵션
| 옵션 | 설명 |
| -i | 공개키 파일을 지정할 때 사용 |
| -f | 강제로 인증키 파일을 추가 |
| -p | 기본 포트인 22번이 아닌 경우 특정 포트 번호를 지정할 때 사용 |
사용 예
- IP 주소가 192.168.56.122번인 원격지 서버에 공개키 정보를 등록
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.122'Linux' 카테고리의 다른 글
| [Linux] Backup 및 Restore 관련 명령어(1) - cpio (0) | 2025.11.07 |
|---|---|
| [Linux] 시스템 보안 관리 - sysctl (0) | 2025.10.27 |
| [Linux] 로그 관리 - logrotate (0) | 2025.10.13 |
| [Linux] 로그 관련 파일 (0) | 2025.10.07 |
| [Linux] 로그 관련 명령어 - last / lastlog / lastb / dmesg / logger (0) | 2025.10.02 |