티스토리 뷰

반응형
SSH(Secure Shell)

텔넷과 거의 동일하지만 데이터를 암호화해 전송한다는 차이점이 있다. 보안 때문에 텔넷보다 선호되는 원격제어 방식.

 

서버(원격 접속의 대상이 되는 호스트)에서 작업

서버 IP:192.168.111.100

 

1. ssh 서버 설치 확인 

rpm -qa | grep ssh

이미 설치되어 있다. 만약에 openssh-server가 없다면 dnf -y openssh-server 명령어로 설치.

(클라이언트용 서비스까지 같이 설치된다.)

 


2. 서버 상태 확인 - 가동 

 

이미 깔려있었다면 서비스가 돌아가고 있는지 확인한다.

(설치하는 패키지의 이름과 서비스의 이름이 다르다. 규칙성은 없고 그냥... 제각각이다.)


systemctl status sshd

만약 Active의 상태가 inactive이거나 지금 설치한 경우


systemctl start sshd 

시작시켜준다.

 

부팅시 자동으로 시작하게 하려면 

systemctl enable sshd

도 해준다.

 

근데 두번 쓰기 귀찮으니까 그냥 지금 시작시키면서 부팅시에도 자동으로 시작하게(상시 가동하게) 하려면
systemctl --now enable sshd

이렇게 해주면 된다.

 


3. 방화벽(포트) 오픈 확인

firewall-cmd --list-all

만약 services 에 ssh가 없고 바로 밑에 port에도 22/tcp가 없다면


firewall-cmd --add-service=ssh--permanent)

또는

firewall-cmd --add-port=22/tcp( --permanent)

이렇게 열어주고,

permanent 옵션 추가시 firewall-cmd --reload 로 리셋해주어야 한다.

 

permanent 옵션 없이 열었는데 영구적으로 바꾸고 싶다면,

firewall-cmd --runtime-to-permanent

해준다.

 

 

+. 호스트네임 변경

 

접속했을 때 확인하기 좋게 미리 호스트네임을 바꿔주면 좋은데 깜빡했다. 나중에 바꿔줬다.

 

hostnamectl set-hostname 변경할이름

바뀐것 바로 적용해서 프롬프트 보고 싶으면

exec bash

쉘 재시작

 

 

클라이언트(접속의 주체가 될 호스트)에서 작업

클라이언트 IP:192.168.111.200


1. 설치 확인

rpm -qa | grep ssh

설치 안되어있으면
dnf -y install openssh

 


2. 접속

ssh 접속할곳ip주소

그냥 ip주소 입력하면 root로 접속된다. 사용자를 지정해주고 싶으면, ssh 사용자명@ip주소
yes
비밀번호 입력

두 번째부터는 yes 안해줘도 된다.

 

 

단순한 접속은 간단하다. 그런데 누군가가 ssh를 통해서 root로 들어와버리면 위험하다. 그래서 root로 접속하는 것을 애초에 차단하고 ssh용 인가사용자를 만들어주는 것이 좋다.


root로 접속하는 것 차단

 

서버에서


vi /etc/ssh/sshd_config

/(슬래시, 검색기능)Permit 

PermitRootLogin yes 부분을 주석처리해주거나 yes -> no로 수정해준다.


systemctl restart sshd 로 재가동

 

 

클라이언트에서 확인

 

root로 접속 시도 

ssh 192.168.111.100

실패

 

일반사용자로 접속 시도

ssh rocky@192.168.111.100

성공

 

제대로 차단되었다.

 

key로 로그인 설정 : 비밀번호 입력 없이 ssh 접속하기

 

0.

root로 키를 받기 위해서는 일단 PermitRootLogin yes 상태여야 한다. 아까 이 부분 차단해놓았으니 다시  풀러 간다. 

vi /etc/ssh/sshd_config

/Permit

PermitRootLogin no -> yes 로 수정. 주석 처리 되어있다면 주석 해제.

 

systemctl restart sshd

 

클라이언트(접속의 주체)에서


1.  키 생성

 

ssh-keygen

엔터 3번(첫 번째는 굳이 키의 위치를 바꿀 필요 없으니 그냥 둔 것. 두 세번째는 비밀번호나 문장이나 없는 것이 가장 안전하므로 설정하지 않기 위해 비워둔 것.)

/root/.ssh 아래에 id_rsa(비밀키), id_rsa.pub(공개키) 생성됨.

ls /root/.ssh 잘 생성되었나  확인.


2. 키뿌리기-자동

ssh-copy-id 서버(접속대상)ip주소

요것도 ssh 접속할 때와 마찬가지로 그냥 ip주소 써주면 루트에게 키를 주고, 키 받을 사용자를 지정해주고 싶으면 사용자@ip주소로 써주면 된다.
비밀번호 입력

 root에게 키가 전달되고 root 계정으로 ssh접속 가능해졌다. 이 경우 root 비밀번호로 접속 차단되어 있어도 키가 있으므로 접속이 가능하다.

 

키를 받은 root로 접속 시도.

비밀번호 묻지 않고 바로 접속하는 것 확인.

 

키를 받지 못한 사용자로 접속 시도.

비밀번호 물어보는 것 확인.

 

일반 사용자에게 키 전달과 접속 시도
ssh-copy-id 사용자명@ip주소
사용자의 비밀번호 입력

해당 사용자로 접속시 비밀번호 없이 접속 가능

 


2-1. 키뿌리기-수동 

 

수동으로 키 전달해보기 위해 자동으로 준 키를 삭제한다.

*키는 홈디렉터리/.ssh 아래에 정확히 authorized_keys 란 이름으로 들어가있어야 제 역할을 한다.

 

서버에서

기존에 받았던 키 삭제

클라이언트에서

접속 시 비밀번호 물어보나(키 잘 삭제되었나) 확인

 

클라이언트에서

키는 아까 ssh-keygen 으로 만들어놓은 것이 있기 때문에 그것을 사용할 것이다. 없으면 클라이언트(접속할 주체) 쪽에서 만들어준다.

 

공개키를 서버쪽으로 복사해준다. scp는 아래에서 설명할 ssh기반의 파일전송 명령어다.
scp $HOME/.ssh/id_rsa.pub 키받을사용자명@ip주소:키받을사용자의home디렉터리(절대경로로)

 

서버에서

 

먼저, 이전에 키를 받을 적이 있는지 즉, 홈디렉터리/.ssh 아래에 authorized_keys 가 있는지 확인해본다.

키를 받은 적이 없다면 .ssh 디렉터리도 없을 것이다.

디렉터리는 있는데 키가 없는 이유는 방금전에 삭제해서...


경우 1) .ssh 디렉터리가 없는 경우(키를 받은 적이 없는 경우)

 

홈디렉터리 밑에 .ssh 디렉터리를 만들어주고, 클라이언트에서 전송해준 키를 .ssh아래로 가져오면서 이름을 authorized_keys로 바꿔준다.


cd 키받을사용자홈디렉터리&&mkdir .ssh&&mv id_rsa.pub .ssh/authorized_keys

&&은 앞의 명령어 수행에 성공하면 이어서 뒤의 명령어까지 수행해주는 접속사.

이름 바꿔서 잘 이동한 것까지 확인.

 

클라이언트에서

접속 확인. 

키를 받은 rocky 사용자는 비밀번호 묻지 않고 접속했지만 root로 접속하려고 하니 비밀번호를 물어보는 것 확인.


경우 2) authorized_keys 파일이 이미 존재하는 경우(사용자가 다른 키를 이미 보유)

 

이전의 키를 덮어써버리면 안되기 때문에 >> 이렇게 해서 새로 받은 키의 내용을 이어쓰기 해준다.

cat 키받을사용자의홈디렉터리/id_rsa.pub >> 인가사용자의홈디렉터리/.ssh/authorized_keys


scp(Secure Copy) : ssh 기반의 파일 전송


1. ssh 연결할 때와 마찬가지로 받을 곳(서버)에 ssh 서버 설치/가동/방화벽 오픈 확인
 + root로 받을 경우 root로 로그인 가능한 상태여야 함.
(/etc/ssh/sshd_config 내 PermitRootLogin yes
수정했을 경우 systemctl restart sshd 해주어야 적용됨.)

 

2. scp 파일명.확장자 ssh접속가능한사용자@받을IP주소(ssh서버의IP주소):받을경로(절대경로)

@호스트OS에서 VM 안으로 전송할 때에도 사용할 수 있다.

 

호스트OS인 윈도우에서 사진을 하나 VM으로 보내보겠다.

 

사진파일 있는 폴더 내에서 shift + 마우스 우클릭해서 '여기에 PowerShell 창 열기(S)'로 파워셸 실행

hi.jpg라는 사진 파일을 루트의 홈 디렉터리로 보낸다.

scp .\hi.jpg root@192.168.111.100:/root

비밀번호입력

잘 갔나 확인 완료.





반응형