SW/리눅스

Linux : SSH Config 파일 사용 방법, 예제, 명령어

얇은생각 2021. 5. 1. 07:30
반응형

SSH를 통해 여러 원격 시스템에 정기적으로 연결하는 경우 원격 IP 주소, 서로 다른 사용자 이름, 비표준 포트 및 다양한 명령줄 옵션을 모두 기억하기는 어렵지만 불가능한 것은 아닙니다. 

한 가지 옵션은 각 원격 서버 연결에 대해 Bash 별칭을 생성하는 것입니다. 하지만, 이 문제에 대한 더 나은, 더 간단한 해결책이 또 있습니다. OpenSSH를 사용하면 연결하는 각 원격 시스템에 대해 서로 다른 SSH 옵션을 저장할 수 있는 사용자별 구성 파일을 설정할 수 있습니다.

SSH 클라이언트 구성 파일의 기본 사항에 대해 설명하고 가장 일반적인 구성 옵션 중 일부를 설명합니다.

 

 

Linux : SSH Config 파일 사용 방법, 예제, 명령어

 

 

전제조건

Linux 또는 MacOS 시스템을 Open과 함께 사용한다고 가정합니다.SSH 클라이언트가 설치되었습니다.

 

 

 

SSH 구성 파일 위치

OpenSSH 클라이언트 측 구성 파일의 이름은 config이고 사용자의 홈 디렉토리 아래의 .ssh 디렉토리에 저장됩니다. 

사용자가 처음으로 ssh 명령을 실행할 때 ~/.ssh 디렉터리가 자동으로 생성됩니다. 시스템에 디렉터리가 없는 경우 아래 명령을 사용하여 디렉터리를 생성하십시오.

mkdir -p ~/.ssh && chmod 700 ~/.ssh

 

 

기본적으로 SSH 구성 파일이 존재하지 않을 수 있으므로 다음 터치 명령을 사용하여 SSH 구성 파일을 생성해야 할 수 있습니다.

touch ~/.ssh/config

 

 

이 파일은 사용자만 읽고 쓸 수 있어야 하며 다른 사용자는 액세스할 수 없습니다.

chmod 600 ~/.ssh/config

 

 

 

SSH 구성 파일 구조 및 패턴

SSH Config File은 다음 구조를 사용합니다.

Host hostname1
    SSH_OPTION value
    SSH_OPTION value

Host hostname2
    SSH_OPTION value

Host *
    SSH_OPTION value

 

 

SSH 클라이언트 구성 파일의 내용은 스탠자(섹션)로 구성됩니다. 각 스탠자는 호스트 지시문으로 시작하며 원격 SSH 서버와의 연결을 설정할 때 사용되는 특정 SSH 옵션을 포함합니다.

들여쓰기는 필요하지 않지만 파일을 읽기 쉽게 만들기 때문에 권장됩니다.

호스트 지시문은 하나의 패턴 또는 공백으로 구분된 패턴 목록을 포함할 수 있습니다. 각 패턴은 공백이 아닌 0자 이상 또는 다음 패턴 지정자 중 하나를 포함할 수 있습니다.

 

* - 0자 이상과 일치합니다. 예를 들어 호스트 *는 모든 호스트와 일치하지만 192.168.0.*는 192.168.0.0/24 서브넷의 호스트와 일치합니다.

? - 한 문자와 정확히 일치합니다. 패턴, 호스트 10.10.0이요? 는 10.10.0[0-9] 범위의 모든 호스트와 일치합니다.

! - 패턴 시작 시 사용할 경우 일치 항목이 무효화됩니다. 예를 들어 호스트 10.10.0.*!10.10.0.5는 10.10.0.5를 제외한 10.10.0.0/24 서브넷의 모든 호스트와 일치합니다.

 

SSH 클라이언트는 구성 파일 스탠자를 스탠자별로 읽으며, 두 개 이상의 패턴이 일치하는 경우 첫 번째 일치 스탠자의 옵션이 우선합니다. 따라서 파일 시작에는 더 많은 호스트별 선언이 제공되고 파일 끝에는 더 많은 일반 재정의가 제공되어야 합니다. 

터미널에 mansh_config를 입력하거나 ssh_config man 페이지를 방문하면 사용 가능한 전체 ssh 옵션 목록을 찾을 수 있습니다.

SSH 구성 파일은 scp, sftp 및 rsync와 같은 다른 프로그램에서도 읽습니다.

 

 

 

SSH 구성 파일 예제

이제 SSH 구성 파일의 기본 사항에 대해 알아보았으니 다음 예를 살펴보겠습니다.

일반적으로 SSH를 통해 원격 서버에 연결할 때 원격 사용자 이름, 호스트 이름 및 포트를 지정합니다. 예를 들어 명령줄에서 포트 2322 dev.example.com이라는 호스트에 John이라는 사용자로 로그인하려면 다음을 입력합니다.

ssh john@dev.example.com -p 2322

 

 

위의 명령과 동일한 옵션을 사용하여 서버에 연결하려면 단순히 sshdev를 입력하면 "~/.ssh/config" 파일에 다음 줄을 입력합니다.

# ~/.ssh/config

Host dev
    HostName dev.example.com
    User john
    Port 2322

 

 

이제 sshdev를 입력하면 ssh 클라이언트가 구성 파일을 읽고 dev 호스트에 대해 지정된 연결 세부 정보를 사용합니다.

 

 

 

공유 SSH 구성 파일 예제

호스트 패턴 및 온셥 우선 순위에 대한 자세한 정보에 대해 알아보겠습니다.

Host targaryen
    HostName 192.168.1.10
    User daenerys
    Port 7654
    IdentityFile ~/.ssh/targaryen.key

Host tyrell
    HostName 192.168.10.20

Host martell
    HostName 192.168.10.50

Host *ell
    user oberyn

Host * !martell
    LogLevel INFO

Host *
    User root
    Compression yes

 

 

ssh stargaryen을 입력하면 ssh 클라이언트가 파일을 읽고 첫 번째 일치 항목인 Host targaryen의 옵션을 적용합니다. 그런 다음 다음 다음 스탠자에서 일치하는 패턴을 하나씩 확인합니다. 다음은 호스트 *!martell(마텔을 제외한 모든 호스트)이며 이 스탠자의 연결 옵션이 적용됩니다. 마지막 정의 Host *도 일치하지만 사용자 옵션이 Host targaryen 스탠자에 이미 정의되어 있기 때문에 압축 옵션만 사용합니다.

ssh stargaryen을 입력할 때 사용되는 전체 옵션 목록은 다음과 같습니다.

HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
LogLevel INFO
Compression yes

 

 

ssh 타이어를 실행할 때 일치하는 호스트 패턴은 다음과 같습니다. 호스트 타이어, 호스트 *ell, 호스트 *!martell 및 호스트 *. 이 경우에 사용되는 옵션은 다음과 같습니다.

HostName 192.168.10.20
User oberyn
LogLevel INFO
Compression yes

 

 

sshmartell을 실행하는 경우 일치하는 호스트 패턴은 다음과 같습니다. 호스트 마텔, 호스트 *ell 및 호스트 *. 이 경우에 사용되는 옵션은 다음과 같습니다.

HostName 192.168.10.50
User oberyn
Compression yes

 

 

다른 모든 연결의 경우 ssh 클라이언트는 호스트 *!martell 및 호스트 * 섹션에 지정된 옵션을 사용합니다.

 

 

 

SSH 구성 파일 옵션을 재정의

ssh 클라이언트는 다음 우선 순위 순서로 구성을 읽습니다.

1. 명령줄에서 옵션을 지정

2. 옵션은 ~/.ssh/config에 정의

3. /etc/ssh/ssh_config에 정의된 옵션

 

단일 옵션을 재정의하려면 명령줄에서 해당 옵션을 지정할 수 있습니다. 예를 들어 다음과 같은 정의가 있는 경우 다음과 같이 하십시오.

Host dev
    HostName dev.example.com
    User john
    Port 2322

 

 

다른 옵션을 모두 사용하려고 하지만 John 대신 사용자 루트로 연결하려면 명령줄에 사용자를 지정하기만 하면 됩니다.

ssh -o "User=root" dev

 

 

-F(configfile) 옵션을 사용하여 사용자별 구성 파일을 대체할 파일을 지정할 수 있습니다.

ssh 클라이언트에서 ssh 구성 파일에 지정된 모든 옵션을 무시하도록 하려면 다음을 사용합니다.

ssh -F /dev/null user@example.com

 

반응형