[Linux] Shell Script을 활용하여 SSH 키 복사

2025. 6. 18. 17:46·Linux
더보기

처음 배우는 셸 스크립트 책 참고

책에서 bash를 사용하므로 sh가 아닌 bash로 실행

서버가 1~2대 라면 괜찮지만 3대 이상이면 매우 번거로워진다. 이때 shell script를 만들어 사용하면 쉽고 빠르게 ssh 공개 키를 여러 서버에 복사할 수 있다.
ssh 키를 복사하려면 ssh 키를 먼저 생성한 후 여러 서버에 복사해야 한다.
어떤 계정으로 키를 복사할지 여부와 해당 계정의 패스워드를 알고 있어야 한다.


스크립트

#!/bin/bash

# 접속할 서버 정보, SSH 키 경로, 공개 키 경로를 변수에 저장
servers="host01"
sshKey="$HOME/.ssh/key.pem"
sshPub="$HOME/.ssh/key.pem.pub"

# SSH 키 생성
ssh-keygen -q -N "" -f $sshKey

# 생성된 키를 해당 서버에 복사
for server in $servers
do
        echo "$server로 키 복사"
        sshpass -p "$1" ssh-copy-id -i $sshPub stack@server
done

실습

위 스크립트를 응용해서 키를 생성하여 2대에 서버에 SSH 키를 복사하였다.

#!/bin/bash

# 서버 목록
servers=("node01" "node02")
username=("worker1" "worker2")
sshKey="$HOME/.ssh/id_ed25519"
sshPub="${sshKey}.pub"

pwd="$1"

if [ -z $pwd ]
then
        echo "Input password"
        exit 1
fi

if [ ! -f $sshKey ] || [ ! -f $sshPub ]
then
        echo "Create SSH Key"
        ssh-keygen -t ed25519 -f $sshKey -N
fi

for ((i=0; i<2; i++))
do
        echo "Copy to ${username[$i]}@${servers[$i]}"
        sshpass -p $pwd ssh-copy-id -i $sshPub -o StrictHostKeyChecking=no ${username[$i]}@${servers[$i]}
done

echo "Finish"

bash 명령으로 실행해야 하고 명령어 뒤에 접속하는 서버 비밀번호를 입력하면 된다.
나는 두 서버 비밀번호가 같아서 한 번만 인자를 입력받았다.

결과적으로 각 서버에 접속하여 .ssh/authorized_keys를 확인하면 키가 복사되었음을 확인할 수 있다.

저작자표시 비영리 변경금지 (새창열림)

'Linux' 카테고리의 다른 글

[Linux] Shell Script를 이용하여 패키지 리포지토리 다운로드  (0) 2025.06.23
[Linux] Shell Script를 이용하여 Timezone 설정  (0) 2025.06.22
[Linux] Shell Script를 활용하여 사용자 계정 생성  (0) 2025.06.16
[Linux] 리눅스마스터 2급 2차 정리 (12)  (2) 2025.06.13
[Linux] 리눅스마스터 2급 2차 정리 (11)  (3) 2025.06.13
'Linux' 카테고리의 다른 글
  • [Linux] Shell Script를 이용하여 패키지 리포지토리 다운로드
  • [Linux] Shell Script를 이용하여 Timezone 설정
  • [Linux] Shell Script를 활용하여 사용자 계정 생성
  • [Linux] 리눅스마스터 2급 2차 정리 (12)
The Engineer, Lucy
The Engineer, Lucy
  • The Engineer, Lucy
    Growing up for My Future💕
    The Engineer, Lucy
    • Instagram
    • GitHub
  • 전체
    오늘
    어제
    • 분류 전체보기 (171) N
      • Linux (26)
      • Infra (9)
      • Cloud (25)
        • AWS (2)
        • GCP (3)
        • Docker (4)
        • Kubernetes (14)
        • IaC (2)
      • NGINX (1)
      • DevOps (3)
      • Computer Science (17)
        • Data Structure (0)
        • Algorithms (1)
        • Operating System (3)
        • Network (11)
        • Database System (2)
      • Coding Test (85) N
        • Algorithms (77) N
        • SQL (7)
      • ETC (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 공지사항

  • 링크

    • Lucy's Instagram
    • Lucy's GitHub
  • 인기 글

  • 태그

    cs 기초 지식 정리
    네트워크
    쉘 스크립트
    너비우선탐색
    docker
    bfs
    dfs
    네트워크 기초 지식
    자바
    리눅스마스터 2급
    리눅스마스터
    셸 스크립트
    백준
    Shell
    티스토리챌린지
    K8s
    Baekjoon
    리눅스
    도커
    Kubernetes
    쿠버네티스
    코딩테스트 공부
    Shell Script
    다이나믹 프로그래밍
    programmers
    network
    Linux
    오블완
    프로그래머스
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
The Engineer, Lucy
[Linux] Shell Script을 활용하여 SSH 키 복사
상단으로

티스토리툴바