리눅스 ssh
- 원격 접속 비교
- Telnet :서버와 클라이언트 사이에 오가는 자료가 암호화 되지 않음으로 사용 안함
- ssh : 자료를 암호화해서 전송
- ssh 서버 설치 : /etc/ssh 폴더에 설치됨
- 우분투 리눅스에는 ssh 원격 접속을 위한 서버가 기본적으로 설치되어 있지 않음
- sudo apt-get update
- sudo apt-get install ssh
- 또는 sudo apt-get install openssh-server
- ssh 실행
- 설치후 처음 접속할 때는 ssh를 실행시켜줘야 한다.
- 그 이후로는 리눅스 실행시 자동으로 실행된다.
- /etc/init.d/ssh restart
- 실행여부 확인
- netstat -a | grep ssh : network statistics의 약자
123456789101112131415161718whan@Linux01:~$ netstat -naActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 127.0.0.53:53 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 10.0.2.15:22 10.0.2.2:1739 ESTABLISHEDtcp6 0 0 :::22 :::* LISTENudp 50688 0 127.0.0.53:53 0.0.0.0:*udp 0 0 0.0.0.0:52735 0.0.0.0:*udp6 0 0 fe80::99c1:d102:cc::123 :::*udp6 0 0 ::1:123 :::*Active UNIX domain sockets (servers and established)Proto RefCnt Flags Type State I-Node Pathunix 2 [ ACC ] STREAM LISTENING 21796 /run/user/121/gnupg/S.gpg-agent.sshunix 2 [ ACC ] STREAM LISTENING 25131 /run/user/1000/gnupg/S.gpg-agent.sshunix 2 [ ACC ] STREAM LISTENING 25737 /run/user/1000/keyring/sshunix 2 [ ACC ] STREAM LISTENING 25462 /tmp/ssh-qiZKorjUjN6b/agent.1302unix 2 [ ACC ] STREAM LISTENING 30763 /run/user/1000/keyring/.ssh- Proto : 프로토콜의 종류
- Recv-Q : 수신 소켓 버퍼에 존재하는 바이트 수
- Send-Q : 송신 소켓 버퍼에 존재하는 바이트 수
- Local Address : 로컬쪽 주소
- Foreign Address : 상대방쪽 주소
- State : 상태
- PID : Process ID
- Program name
- 상태의 종류
- LISTEN : 연결이 가능하도록 관련 서비스(daemon)가 떠있으며 연결이 가능한 대기 상태
- SYN-SENT : 연결을 요청한 상태
- SYN-RECEIVED : 연결 요구에 대한 응답을 준 후 확인 메시지를 기다리고 있는 상태
- ESTABLISHED : 위의 3단계 과정이 종료된 후 연결이 완료된 상태
- FIN-WAIT, FIN2-WAIT, CLOSE-WAIT : 연결 종료를 위해 요청을 받은 후의 과정
- CLOSING : 전송된 메시지가 유실된 상태
- TIME-WAIT : 연결 종료 후 한동안 유지되고 있는 상태
- CLOSED : 연결이 완전히 종료된 상태
- ps -aux | grep ssh
- ps -ef | grep ssh
- netstat -a | grep ssh : network statistics의 약자
- 런레벨 편집기를 이용해서 런레벨에 따른 등록
- sysv-rc-conf : 우분투 18.04 LTS에서는 사라짐
- sshd의 설정 파일 수정
- cat /etc/ssh/sshd_config
- # : 주석임, 그 줄은 처리되지 않음
- Port와 리눅스 서버에 IP가 여러개 있을 때 Listen할 IP지정
1234#Port 22#AddressFamily any#ListenAddress 0.0.0.0#ListenAddress ::- Port : 사용 포트 지정
- 현재는 모든 IP로 연결
- 192.168.56.1로 연결하려면
1ListenAddress 192.168.56.1
- Log 기록 방식
1234# Logging#SyslogFacility AUTH#SyslogFacility AUTHPRIV#LogLevel INFO- SyslogFacility :
- AUTH : 사용자 인증에 관련 메시지
- AUTHPRIV : 인증 절차에 관련 메시지
- LogLevel : 로그 레벨 지정
- SyslogFacility :
- 로그인 관련
12345#LoginGraceTime 2m#PermitRootLogin prohibit-password#StrictModes yes#MaxAuthTries 6#MaxSessions 10- LoginGraceTime : 지정한 시간내에 로그인하지 않으면 자동으로 접속 종료
- PermitRootLogin : 관리자 로그인 허용 여부(yes or no)
- StrictModes : 파일 모드 및 사용자 홈디렉터리 소유권과 원격 호스트 파일들을 sshd가 확인할 지 여부, 혹시 모를 악성 코드를 찾아내기 위한 옵션
- MaxAuthTries : 최대 인증 시도(3회 이상 실패시 로그 기록)
- MaxSessions : 최대 세션 연결 개수
- 기록 보기 허용 여부
12PrintMotd no#PrintLastLog yes- PrintMotd : /etc/motd 파일 보기 허용 여부
- PrintLastLog : ssh 로그인시 지난번 로그인 기록을 보여줄 지 여부
- 기타
12#PidFile /var/run/sshd.pid#Banner none- PidFile : Process ID를 저장할 파일
- Banner : ssh 로그인시 출력할 메시지 파일
- ssh 접속하기
- linux 환경에서 ssh로 접속
- ssh [사용자계정]@[서버주소] [-p 포트]
- ssh -l [사용자계정] [서버주소] [-p 포트]
- Windows 환경에서 PuTTY로 접속
- linux 환경에서 ssh로 접속
- 공개키를 이용한 사용자 인증 : 일반적인 방법
- Linux01에 접속하여 터미널에
- ssh whan@192.168.56.2 : Linux02의 whan 계정에 접속
- 클라이언트(Linux01) -> 서버(Linux02) : 접속 요청, 공개키 요구
- 서버(Linux02) -> 클라이언트(Linux01) : 공개키 제공, 개인키 요구
- ssh 서버(Linux02)에 저장된 호스트의 키 지문(공개키)
- 공개키는 서버(Linux02)의 /etc/ssh/ssh_host_ecdsa_key.pub에 저장되어 있음
- Linux02에서 ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub : 호스트 키 지문 확인
- 클라이언트(Linux01) -> 서버(Linux02) : 공개키에 해당하는 개인키 생성(패스워드 요구)후 제공
- 접속 승인
- Linux01에 접속하여 터미널에
- 공개키 인증 사용하기 : 클라이언트(Linux01)에서 실행
- ssh-keygen :
123456789101112131415161718192021whan@Linux01:~$ ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/home/whan/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /home/whan/.ssh/id_rsa.Your public key has been saved in /home/whan/.ssh/id_rsa.pub.The key fingerprint is:SHA256:ecDCTilMOteWXE7aK5WlJdt3vLBU9HAy2EoEc/bLsrs whan@whan-VirtualBoxThe key's randomart image is:+---[RSA 2048]----+| . + =o++* .|| + + X O +o+.* || o + @ X ..+.+ .|| o = o + o.= o || o S . o + || . . o || . || . || E. |+----[SHA256]-----+- 저장될 폴더 지정 : 엔터치면 기본 폴더로 지정됨
- 사용할 passphrase 2번 입력
- .ssh 디렉터리가 생성되고 그 안에 공개키, 개인키 만들어짐
- shmod 700 .ssh : .ssh 디렉터리를 700 으로 허가
- ssh-copy-id whan@192.168.56.2 : 개인키를 서버(Linux02)로 복사
12345678910111213whan@Linux01:~$ ssh-copy-id whan@192.168.56.2/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/whan/.ssh/id_rsa.pub"The authenticity of host '192.168.56.2 (192.168.56.2)' can't be established.ECDSA key fingerprint is SHA256:j6ONmerW7b+gTXd55ivfwDIKgSPYoQpZnXebzEy5mpY.Are you sure you want to continue connecting (yes/no)? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keyswhan@192.168.56.2's password:Number of key(s) added: 1Now try logging into the machine, with: "ssh 'whan@192.168.57.1'"and check to make sure that only the key(s) you wanted were added.- 서버(57.1)의 whan의 암호를 넣어줌
- 서버(57.1)의 whan이란 아이디에 공개키 전송됨
- ssh whan@192.168.56.2 : 암호대신 passphrase를 넣어 접속
- ssh-keygen :
- ssh-agent를 이용해서 여러 SSH 서버 접속하기
- 공개키 인증사용하기로 192.168.56.2 에 공개키 전송
- 공개키 인증사용하기로 192.168.56.3 에 공개키 전송
- 클라이언트 192.168.56.1에서 56.2과 56.3은 각각 접속 가능
- 56.2에서 56.3은 상호 접속 불가능
- sudo apt-get install keychain : 192.168.56.1에 keychain 설치
- keychain ~/.ssh/id_rsa : 개인키를 ssh-agent에 등록
- Linux02(192.168.56.2)에서 Linux03(192.168.56.3) 접속
- ssh -A whan@192.168.56.3 : 56.2에서 56.3 접속
- -A 옵션이 ssh-agent를 포워딩하도록 하여 접속 가능하게 함
- 192.168.56.XX아이피만 ssh 접속이 가능하게 하려면
- /etc/hosts.allow에 다음을 추가하면 해당 아이피를 허용
1sshd: 192.168.56.0/255.255.255.0 - /etc/hosts.deny에 다음을 추가하면 해당 아이피를 차단
1ssdh: ALL
- /etc/hosts.allow에 다음을 추가하면 해당 아이피를 허용