SW/리눅스

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

얇은생각 2022. 5. 20. 07:30
반응형

SSH(Secure Shell)는 클라이언트와 서버 간의 암호화된 연결에 사용되는 암호화 네트워크 프로토콜입니다. SSH 클라이언트는 원격 시스템의 SSH 서버에 대한 보안 연결을 생성합니다. 암호화된 연결을 사용하여 서버, X11 터널링, 포트 전달 등의 명령을 실행할 수 있습니다.

사용 가능한 SSH 클라이언트는 무료 및 상업용이며 OpenSSH가 가장 널리 사용됩니다. Linux, OpenBSD, Windows 및 macOS를 포함한 모든 주요 플랫폼에서 사용할 수 있습니다.

OpenSSH 명령줄 클라이언트(ssh)를 사용하여 원격 시스템에 로그인하여 명령을 실행하거나 다른 작업을 수행합니다.

 

 

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

 

 

OpenSSH 클라이언트를 설치

OpenSSH 클라이언트 프로그램을 터미널에서 호출할 수 있습니다. OpenSSH 클라이언트 패키지는 SSH 명령과 함께 설치되는 scp 및 sftp와 같은 다른 SSH 유틸리티도 제공합니다.

 

 

 

Linux에 OpenSSH 클라이언트를 설치

OpenSSH 클라이언트는 기본적으로 대부분의 Linux 배포판에 미리 설치됩니다. 시스템에 ssh 클라이언트가 설치되어 있지 않으면 배포 패키지 관리자를 사용하여 설치할 수 있습니다.

 

 

 

Ubuntu 및 Debian에 OpenSSH를 설치

sudo dnf install openssh-clients

 

 

 

CentOS 및 Fedora에 OpenSSH를 설치

sudo dnf install openssh-clients

 

 

 

Windows 10에 OpenSSH 클라이언트를 설치

대부분의 Windows 사용자는 Putty를 사용하여 SSH를 통해 원격 시스템에 연결합니다. 그러나 최신 버전의 Windows 10에는 OpenSSH 클라이언트 및 서버가 포함되어 있습니다. 두 패키지 모두 GUI 또는 PowerShell을 통해 설치할 수 있습니다.

OpenSSH 패키지의 정확한 이름을 찾으려면 다음 명령을 입력합니다.

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

# Name  : OpenSSH.Client~~~~0.0.1.0
# State : NotPresent
# Name  : OpenSSH.Server~~~~0.0.1.0
# State : NotPresent

 

 

명령은 다음과 같은 내용을 반환해야 합니다.

패키지 이름을 알고 나면 다음을 실행하여 설치합니다.

성공 시 출력은 다음과 같습니다.

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# Path          :
# Online        : True
# RestartNeeded : False

 

 

 

MacOS에 OpenSSH 클라이언트를 설치

macOS는 OpenSSH 클라이언트가 기본적으로 설치됩니다.

 

 

 

ssh 명령을 사용하는 방법

SSH를 통해 원격 시스템에 로그인할 수 있으려면 다음 요구 사항이 충족되어야 합니다.

원격 시스템에서 SSH 서버가 실행 중이어야 합니다.

SSH 포트는 원격 시스템 방화벽에서 열려 있어야 합니다.

원격 계정의 사용자 이름과 암호를 알고 있어야 합니다. 원격 로그인하려면 계정에 적절한 권한이 있어야 합니다.

 

ssh 명령의 기본 구문은 다음과 같습니다.

ssh [OPTIONS] [USER@]:HOST

 

 

ssh 명령을 사용하려면 터미널 또는 PowerShell을 열고 ssh를 입력한 다음 원격 호스트 이름을 입력합니다.

SSH를 통해 원격 시스템에 처음 연결하면 다음과 같은 메시지가 표시됩니다.

ssh ssh.jjeongil.com

# The authenticity of host 'ssh.linuxize.com (192.168.121.111)' can't be established.
# ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY.
# Are you sure you want to continue connecting (yes/no)?

 

 

 

각 호스트에는 ~//ssh/known_hosts 파일에 저장된 고유한 지문이 있습니다.

yes를 입력하여 원격 지문을 저장하면 암호를 입력하라는 메시지가 표시됩니다.

Warning: Permanently added 'ssh.jjeongil.com' (ECDSA) to the list of known hosts.

dev@ssh.jjeongil.com's password:

 

 

암호를 입력하면 원격 컴퓨터에 로그인됩니다.

사용자 이름이 지정되지 않은 경우 ssh 명령은 현재 시스템 로그인 이름을 사용합니다.

다른 사용자로 로그인하려면 다음 형식으로 사용자 이름과 호스트를 지정하십시오.

ssh username@hostname

 

 

사용자 이름은 -l 옵션으로도 지정할 수 있습니다.

ssh -l username hostname

 

 

기본적으로 포트가 제공되지 않으면 SSH 클라이언트는 포트 22의 원격 서버에 연결을 시도합니다. 일부 서버에서는 관리자가 자동 공격의 위험을 줄여 서버에 보안 계층을 추가하기 위해 기본 SSH 포트를 변경하고 있습니다.

기본 포트가 아닌 포트에 연결하려면 -p 옵션을 사용하여 포트를 지정합니다.

ssh -p 5522 username@hostname

 

 

인증 또는 연결 문제가 발생하는 경우 -v 옵션을 사용하여 SSH에 디버깅 메시지를 인쇄하도록 지시합니다.

ssh -v username@hostname

 

 

장황한 수준을 높이려면 -vv 또는 -vvv를 사용합니다.

ssh 명령은 여러 옵션을 사용할 수 있습니다.

모든 옵션의 전체 목록을 보려면 터미널에 man ssh를 입력하여 ssh man 페이지를 읽습니다.

 

 

 

SSH 구성 파일

SSH를 통해 매일 여러 원격 시스템에 연결하는 경우 모든 원격 IP 주소, 서로 다른 사용자 이름, 비표준 포트 및 다양한 명령줄 옵션을 기억하는 것이 어렵거나 불가능하지는 않습니다.

OpenSSH 클라이언트는 사용자별 구성 파일(~/ssh/config)에 설정된 옵션을 읽습니다. 이 파일에서는 연결하는 각 원격 시스템에 대해 서로 다른 SSH 옵션을 저장할 수 있습니다.

샘플 SSH 구성은 다음과 같습니다.

Host dev
    HostName dev.jjeongil.com
    User mike
    Port 4422

 

 

ssh dev를 입력하여 ssh 클라이언트를 호출하면 명령이 ~//ssh/config 파일을 읽고 dev 호스트에 대해 지정된 연결 세부 정보를 사용합니다. 이 예에서 ssh dev는 다음과 같습니다.

ssh -p 4422 mike@dev.linuxize.com

 

 

자세한 내용은 SSH 구성 파일에 대한 문서를 참조하십시오.

 

 

 

공개 키 인증

SSH 프로토콜은 다양한 인증 메커니즘을 지원합니다.

공용 키 기반 인증 메커니즘을 사용하면 암호를 입력할 필요 없이 원격 서버에 로그인할 수 있습니다.

이 방법은 인증에 사용되는 암호화 키 쌍을 생성하는 방식으로 작동합니다. 개인 키는 클라이언트 장치에 저장되고 공용 키는 로그인할 각 원격 서버로 전송됩니다. 키 인증을 허용하도록 원격 서버를 구성해야 합니다.

로컬 시스템에 SSH 키 쌍이 없는 경우 다음을 입력하여 키 쌍을 생성할 수 있습니다.

ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

 

 

보안 암호를 입력하라는 메시지가 표시됩니다. 암호를 사용할지 여부는 사용자에게 달려 있습니다. 

키 쌍을 얻으면 공개 키를 원격 서버에 복사합니다.

ssh-copy-id username@hostname

 

 

원격 사용자 암호를 입력하면 공용 키가 원격 사용자 authorized_keys 파일에 추가됩니다.

키가 업로드되면 암호를 입력하라는 메시지가 표시되지 않고 원격 서버에 로그인할 수 있습니다.

키 기반 인증을 설정하면 로그인 프로세스를 단순화하고 전체 서버 보안을 향상시킬 수 있습니다.

 

 

 

포트 포워딩

SSH 터널링 또는 SSH 포트 포워딩은 서비스 포트를 릴레이할 수 있는 클라이언트와 서버 시스템 간에 암호화된 SSH 연결을 만드는 방법입니다.

SSH 전달은 암호화되지 않은 프로토콜(예: VNC 또는 FTP)을 사용하거나 지역 제한 콘텐츠에 액세스하거나 중간 방화벽을 우회하는 서비스의 네트워크 데이터를 전송하는 데 유용합니다. 기본적으로 모든 TCP 포트를 포워드하고 보안 SSH 연결을 통해 트래픽을 터널링할 수 있습니다.

SSH 포트 포워딩에는 세 가지 유형이 있습니다.

 

 

 

로컬 포트 포워딩

로컬 포트 전달을 사용하면 연결을 클라이언트 호스트에서 SSH 서버 호스트로 전달한 다음 대상 호스트 포트로 전달할 수 있습니다.

로컬 포트 포워딩을 만들려면 -L 옵션을 ssh 클라이언트에 전달합니다.

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f username@hostname

 

 

-f 옵션은 ssh 명령을 백그라운드에서 실행하고 -N은 원격 명령을 실행하지 않도록 지시합니다.

 

 

 

원격 포트 전달

원격 포트 포워딩은 로컬 포트 포워딩과 반대입니다. 포트를 서버 호스트에서 클라이언트 호스트로 전달한 다음 대상 호스트 포트로 전달합니다.

-R 옵션은 SSH에 원격 포트 포워딩을 생성하도록 지시합니다.

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f username@hostname

 

 

 

동적 포트 전달

동적 포트 전달은 다양한 포트에서 통신할 수 있는 SOCKS 프록시 서버를 만듭니다.

SOKS(Dynamic Port Forwarding)를 만들려면 -D 옵션을 ssh 클라이언트에 전달합니다.

ssh -D [LOCAL_IP:]LOCAL_PORT  -N -f username@hostname

 

 

자세한 내용과 단계별 지침은 SSH 터널링 설정 방법(포트 포워딩) 문서를 참조하십시오.

SSH를 통해 원격 서버에 연결하려면 SSH 명령 다음에 원격 사용자 이름 및 호스트 이름(ssh username@hostname)을 사용합니다.

원격 서버를 관리하려면 ssh 명령 사용 방법을 알아야 합니다.

반응형