이번에는 진짜 선배님의 글을 읽어볼 시간이다.
자 읽고 쓰자.
원격 서버에 접속하는 명령어
ssh [username]@[hostname] -p [sshport]
[예시] ssh dodol@10.0.0.0 -p 5000
(-p를 설정하지 않는 경우에는 일반적으로 22이다)
원격 서버에서 특정 명령어를 실행하는 명령어
ssh [username]@[hostname] -p [sshport] 명령어
[예시] ssh dodol@10.0.0.0 -p 5000 ls
이건 좀 신기하다
개인키와 함께 접속하는 명령어
ssh -i /경로/키파일.pem [username]@[hostname]
[예시] ssh -i server-key.pem dodol@10.0.0.0
원격 서버의 특정 포트와 포트포워딩하는 명령어
ssh -N -L [localport]:[destserver]:[destport] [username]@[hostname]
[예시] ssh -N -L 8000:my.server.com:3000 dodol@10.0.0.0
(-N은 배쉬 셸(bash shell)을 띄우지 않는다는 옵션이다)
이건 뭐야? 싶었는데 와 대박...
그러니까 위의 예시 명령어를 치면 내 localhost:8000을 통해 들어온 요청을
원격 서버(dodol@10.0.0.0)에서 my.server.com의 3000번 포트로 전달하는 거다
그래서 한번 해보려고 "ssh -N -L 8001:127.0.0.1:3000 ubuntu@0.0.0.0 -i key.pem"를 입력한 다음에
localhost:8001에 접속하니 그라파나 로그인창이 나타났다!
(3000번 포트는 Grafana로 연결되어 있다)
진짜 대박이다...
근데 이거는 왜 쓰는지가 문득 궁금해졌다.
왜 쓰는 명령어인가?
자 생각해 보자.
지금 나는 AWS에서 EC2 인스턴스를 대여해서 사용 중이었다.
그리고 ssh 명령어로 직접 접근하였다.
하지만 서버가 많아진다면?
이 서버들이 모두 Public IP를 가지고 있어서 외부 인터넷에 연결돼 있다면
인터넷을 돌아다니는 악성 봇들이 공격할 수 있는 입구가 많아지는 것이다.
(지금도 내 서버 로그에는 악성 봇들의 침입시도 흔적이 찍히고 있다 ㅠㅠ)
그래서 서버들은 내부망으로 두고,
중계 서버를 둬서 안전하게 접근할 수 있도록 하는 것이라고 이해했다.
(그리고 이러한 중계 서버를 Bastion(배스천) 서버라고 한다)
원격 서버에서 로컬 머신으로 포트포워딩 명령어
ssh -R [remoteport]:[host]:[hostport] [remote]
[예시] ssh -R 8000:www.google.com:80 dodol@10.0.0.0
이건 뭐냐면, 서버(dodol@10.0.0.0)에서 8000번 포트(remoteport)가 로컬 머신을 통해 google.com의 80번 포트에 연결하는 것이다.
ssh -R 8000:localhost:3000 dodol@10.0.0.0
이렇게 쓴다면, 서버가 8000번 포트를 통해, 내 로컬에 띄워진 3000번 포트와 연결되는 거다.
이야... 진짜 대박이다. 너무 신기하다.
이거는 위에 예시랑 반대로(리버스 포트포워딩이니까) 내부망에 있는 경우에 외부망과 연결하기 위해 쓴다거나 그런 거겠지?라고 이해했다.
원래 SSH 명령어만 다루려고 했는데 하다 보니 재밌어서 SCP까지 해야겠다.
SCP란?
Secure Copy Protocol의 약자로 SSH 프로토콜 기반으로 동작하는 파일 복사 프로토콜이다.
(아! 왜 공식문서에서 FTP의 대안이라고 나왔던 건지 이해된다)
로컬 머신에서 원격 서버로 파일 전송하기
scp [local-file-path] [username]@[hostname]:[remote-file-path]
[예시] scp ~/file.txt dodol@10.0.0.0:"~/remote-path"
이야... 이거도 예전에 Lightsail 서버 사용할 때 어떻게 파일 전송하는지 몰라서
FileZilla를 쓰며 고군분투했던 기억이 난다.
이밖에도 아래와 같은 명령어도 있다.
로컬 머신에서 원격 서버로 디렉토리 전송하기
scp -r [local-dir-path] [username]@[hostname]:[remote-dir-path]
원격 서버에서 로컬 머신으로 파일 전송하기
scp [username]@[hostname]:[remote-file-path] [local-dir-path]
느낀 점
아 진짜 재밌었다.
그냥 명령어만 알려주는 거라고 생각했는데
실제로 해보니까 와닿기도 하고 어떤 건지 이해가 더 잘됐다.
생각보다 선배님의 블로그 글을 하나씩 정복하는 것이 오래 걸리지만(게을러서)
그래도 오늘처럼 꾸준히, 계속해보자.
참고 자료
'거인의 무릎에 올라타기' 카테고리의 다른 글
SSH란 무엇인가? (0) | 2025.04.10 |
---|