본문 바로가기
Linux

Linux scp ssh key 인증

by codeok 2025. 1. 18.
반응형

Linux에서 서버 간에 파일을 복사하는 방법 중에 scp(secure copy protocol)로 ssh 연결을 통한 암호화를 이용해서 파일을 전송하는 방법이 있습니다.

scp 명령어를 통해서 서버간 파일을 복사할 때 패스워드를 직접 입력해주기도 하지만, ssh-keygen을 통해서 client의 공개키(~/.ssh/id_rsa.pub)를 server에 인증키(~/.ssh/authorized_keys)에 등록하면 간편하게 패스워드를 입력하지 않고 서버 간 파일을 복사할 수 있습니다.

 

윈도우 환경 Docker에서 ubuntu:latest 이미지로 client/server 2개의 컨테이너를 띄우고

client 컨테이너에서 server 컨테이너로 scp 명령어를 통해서 비밀번호 없이 ssh key 인증으로 파일을 전송하는 방법을 정리했습니다.

 

client 컨테이너 기동

client 컨테이너와 server 컨테이너 모두 --privileged 옵션으로 Host 시스템 모두 접근 가능하게 열어줍니다.

--hostname도 지정을 해서 더 직관적이게 설정해 줍니다.

이미지는 ubuntu:latest 최신 버전을 사용했습니다.

정상적으로 컨테이너가 생성이 되면 docker exec -it 명령어로 생성한 컨테이너에 접근해 줍니다.

 

docker run -it -d --privileged --hostname client --name client ubuntu:latest
docker exec -it client /bin/bash

 

 

client 컨테이너 업데이트 및 openssh-client 설치

업데이트가 되고 정상적으로 openssh-client가 설치되면 하단과 같이 나오게 됩니다.

apt-get update && apt-get upgrade -y
apt-get install -y openssh-client

 

server 컨테이너 기동

server 컨테이너도 client와 동일하게 생성을 합니다.

정상적으로 컨테이너가 생성이 되고 docker exec -it 명령어로 접근이 됩니다.

docker run -it -d --privileged --hostname server --name server ubuntu:latest
docker exec -it server /bin/bash

 

 

server 컨테이너 업데이트 및 openssh-server & vim 설치

server 컨테이너도 업데이트를 진행하고 openssh-server와 vim을 설치해 줍니다.

vim의 경우는 /etc/ssh/sshd_config에 PermitRootLogin 설정을 yes로 허용해 주기 위해서 설치를 합니다.

openssh-server를 설치할 때 위치 및 타임존을 선택하는 항목이 나오는데 Ex) Asia, Seoul과 같이 본인의 지역에 맞게 설정해 줍니다.

위치와 타임존을 선택하고 잠깐 기다리면 설치가 완료됩니다.

apt-get update && apt-get upgrade -y
apt-get install -y openssh-server vim

 

 

server 컨테이너 환경설정 및 ssh 재기동

해당 게시물에서는 root로 client에서 server로 접근을 하기 위해서 /etc/ssh/sshd_config에 PermitRootLogin을 yes로 변경해 줬습니다.

cat 명령어로 조회를 해보면 기존에는 prohibit-password로 되어있고 주석이 된 것을 볼 수 있습니다.

cat /etc/ssh/sshd_config | grep PermitRootLogin

 

 

vim으로 들어가서 #PermitRootLogin prohibit-password을 PermitRootLogin yes로 변경해 줍니다.

vi /etc/ssh/sshd_config

 

 

/etc/ssh/sshd_config에 PermitRootLogin을 yes로 변경해주고 나면 ssh를 재시작해주면 됩니다.

재시작을 하고 정상적으로 되면 client에서 접근이 됩니다.

service ssh restart

 

client ssh key 생성

client 컨테이너에서 server 컨테이너로 scp 명령어를 통해서 파일을 복사하기에 client에서 ssh key를 생성해 줍니다.

ssh-keygen -t rsa 명령어를 통해서 ssh key를 생성해 줍니다.

명령어를 입력하고 나면 비밀키와 부가정보들을 입력하라고 나옵니다.

저는 기본 설정으로 하기에 Enter로 모두 넘기겠습니다.

정상적으로 생성되고 나면 The key's randomart image is: 가 나옵니다.

ssh-keygen -t rsa

생성하고 나면 ~/.ssh 경로에 비밀키(id_rsa)와 공개키(id_rsa.pub)가 생성이 된 것을 볼 수 있습니다.

ls -al 명령어로 ~/.ssh 경로 하위를 조회해 보면 정상적으로 존재하는 것을 볼 수 있습니다.

ls -al ~/.ssh/

 

client ~/.ssh/id_rsa.pub를 ~/.ssh/server authorized_keys에 복사

client에서 ~/.ssh/id_rsa.pub를 cat으로 출력하고 복사합니다.

server에 복사한 내용을 ~/.ssh/autorhized_keys 넣어주고 생성합니다.

client의 공개키(~/.ssh/id_rsa.pub)를 server의 인증키(~/.ssh/autorhized_keys)에 넣어주면 ssh, scp 명령어를 비밀번호 입력 없이 사용할 수 있습니다.

 

client에서 server로 ssh 접속

server에서 hostname -i로 나오는 ip를 확인합니다.

hostname -i

 

 

client에서 server의 ip를 입력해서 ssh root@172.17.0.3을 입력하면 정상적으로 server에 접근이 됩니다.

ssh root@172.17.0.3

 

client에서 server로 scp 파일 전송

client에서 echo로 파일을 하나 만들어주고 scp 명령어로 server로 전송합니다.

scp 명령어로 client에 있는 hello.txt 파일을 타겟 서버(root@172.17.0.3)인 /home 경로로 복사해 줍니다.

echo "Hello server container" > hello.txt
cat hello.txt
scp hello.txt root@172.17.0.3:/home

 

 

server에서 ls /home과 cat으로 확인해 보면 정상적으로 파일이 복사된 것을 확인 가능합니다.

ls /home/
cat /home/hello.txt

 

감사합니다.

반응형