Linux에서 가장 일반적인 SSH 명령 사용 및 구성
요약: 이 가이드에서는 SSH의 일반적인 사용 사례에 대해 설명합니다. 또한 일상 생활에서 생산성을 높이는 데 사용할 수 있는 일반적으로 사용되는 SSH 구성에 대해서도 논의합니다.
SSH(Secure Shell)는 널리 채택된 네트워크 프로토콜로 원격 호스트와 안전한 방식으로 상호 작용할 수 있습니다. 그들 사이의 모든 통신을 암호화하여 보안을 제공합니다.
Linux에서 SSH 명령을 사용하는 방법
이 섹션에서는 SSH 프로토콜의 인기 있는 몇 가지 사용 사례에 대해 설명합니다.
telnet, netcat 등과 같은 프로토콜을 사용하여 원격 Linux 호스트와 상호 작용하는 다양한 방법이 있습니다. 그러나 이들은 암호화가 없기 때문에 안전하지 않습니다. SSH 프로토콜을 사용하여 호스트 간의 보안 통신을 허용할 수 있습니다.
원격 호스트와 상호 작용하려면 SSH 클라이언트를 사용해야 합니다. Linux에서 사용할 수 있는 GUI 및 CLI 기반 클라이언트가 많이 있습니다. 그러나 이 가이드 전체에서 ssh라는 명령줄 유틸리티를 사용합니다. 기본적으로 ssh 유틸리티는 대부분의 Linux 배포판에서 사용할 수 있습니다.
SSH 명령의 구문은 다음과 같습니다.
$ ssh [OPTIONS] [COMMANDS] [ARGS]
여기에서 대괄호 ([])
는 선택적 인수를 나타내고 각괄호 (<>)
는 필수 인수를 나타냅니다.
ssh 클라이언트를 사용하여 원격 호스트에 연결해 보겠습니다.
$ ssh -l root 192.168.19.130
이 예에서는 -l
옵션을 사용하여 로그인 이름을 지정했으며 대상은 192.168.19.130입니다. 올바른 암호를 입력하면 SSH 연결이 설정됩니다. 이제 로컬 시스템과 마찬가지로 원격 호스트에서 명령을 실행할 수 있습니다.
# hostname
세션을 종료하려면 exit 명령이나 ctrl+D
키 조합을 사용할 수 있습니다.

각 새 세션에 대해 원격 호스트로 인증해야 한다는 점에 유의하는 것이 중요합니다. 매번 비밀번호를 입력하지 않도록 SSH 비밀번호 없는 로그인을 설정할 수 있습니다.
이전 섹션에서 원격 호스트와 연결을 설정하는 방법을 살펴보았는데, 이는 원격 호스트를 장기간 사용할 경우에만 적합합니다. 때로는 원격 호스트에서 하나 또는 두 개의 명령만 실행하면 됩니다. 이러한 경우 장기 세션을 생성하지 않고 해당 명령을 실행할 수 있습니다.
원격 호스트에서 hostname 명령을 실행해 보겠습니다.
$ ssh -l root 192.168.19.130 hostname
비슷한 방식으로 원격 Linux 시스템에서 여러 명령을 실행할 수 있습니다.
$ ssh -l root 192.168.19.130 'hostname; pwd'

명령은 따옴표로 묶고 세미콜론 (;)
문자로 구분해야 합니다. 여러 원격 Linux 호스트에서 명령을 실행하려면 Pssh – 여러 원격 Linux 호스트에서 명령 실행 기사를 읽으십시오.
명령과 유사하게 원격 호스트에서 로컬 스크립트를 실행할 수도 있습니다. 예를 들어 이것을 이해합시다.
먼저 실행 권한이 있는 로컬 시스템에서 간단한 셸 스크립트를 만듭니다.
$ cat script.sh hostname pwd
이제 원격 호스트에서 실행해 보겠습니다.
$ ssh [email protected] 'bash -s' < ./script.sh
이 예에서는 bash의 -s
옵션을 사용하여 표준 입력에서 스크립트를 읽습니다.

우리는 파일과 디렉토리를 자주 사용합니다. 사용자가 수행하는 일반적인 작업 중 하나는 디렉터리와 파일을 복사하는 것입니다. 로컬 시스템과 마찬가지로 SSH 프로토콜을 사용하여 파일을 안전하게 복사하는 scp 명령을 사용하여 원격 호스트 간에 파일과 디렉토리를 복사할 수 있습니다.
script.sh 파일을 원격 호스트의 /tmp 디렉토리에 복사해 보겠습니다.
$ scp script.sh [email protected]:/tmp
이제 파일이 복사되었는지 확인합니다.
$ ssh [email protected] 'ls /tmp/script.sh'

비슷한 방법으로 scp 명령을 사용하여 디렉토리를 복사할 수 있습니다. 그러나 명령과 함께 -r
옵션을 사용해야 합니다.
SSH는 stdin, stdout, stderr 등과 같은 가능한 모든 데이터 스트림을 압축하는 gzip 압축 알고리즘을 사용하여 데이터 압축을 지원합니다. 이 옵션은 느린 네트워크 연결을 사용할 때 매우 유용합니다.
-C
옵션을 사용하여 SSH에서 압축을 활성화할 수 있습니다.
$ ssh -C -l root 192.168.19.130 'hostname'

Linux 사용자는 다양한 SSH 연결 및 구성 관련 문제를 조사하기 위해 SSH 세션을 디버그해야 하는 경우가 많습니다. 이러한 경우 현재 세션의 디버그 로그를 인쇄하는 자세한 정보 표시 모드를 활성화할 수 있습니다.
-v
옵션을 사용하여 상세 모드를 활성화해 보겠습니다.
$ ssh -v -l root 192.168.19.130 hostname
이 외에도 여러 -v
옵션을 사용하여 상세 수준을 높일 수 있습니다.
-v
– 상세 수준을 1로 설정하고 클라이언트 측 활동에 대한 세부 정보를 제공합니다.-vv
– 상세 수준을 2로 설정하고 클라이언트 및 서버 측 활동에 대한 세부 정보를 제공합니다.-vvv
– 상세 수준을 3으로 설정하고 클라이언트 및 서버 측 활동에 대한 자세한 정보를 제공합니다.
SSH가 지원하는 최대 세부 정보 수준은 3입니다. 다음을 실행해 보겠습니다.
$ ssh -vvv -l root 192.168.19.130 hostname

위의 예에서 debug1은 상세 수준 1에 의해 활성화된 디버그 메시지를 나타냅니다. 마찬가지로 debug2 및 debug3은 상세 수준 2 및 3에 의해 활성화된 디버그 메시지를 각각 나타냅니다.
SSH와 함께 이스케이프 시퀀스를 사용하여 클라이언트 터미널 세션을 관리할 수 있습니다. 적절한 사용 사례와 함께 일반적으로 사용되는 이스케이프 시퀀스에 대해 논의해 보겠습니다.
때로는 현재 SSH 세션을 종료하지 않고 로컬 시스템에서 몇 가지 활동을 수행해야 합니다. 이러한 시나리오에서는 ~ + ctrl+z
키 시퀀스를 사용하여 현재 세션을 일시 중단할 수 있습니다.
먼저 원격 호스트에 로그인하고 hostname 명령을 실행합니다.
$ ssh -l root 192.168.19.130 # hostname
다음으로, 현재 세션을 일시 중단하려면 먼저 물결표 (~)
문자를 입력한 다음 ctrl+z
키를 누르십시오. 물결표 (~)
문자는 ctrl+z
를 누를 때까지 표준 출력에 표시되지 않습니다.
이제 세션이 일시 중단되었는지 확인합니다.
$ jobs
여기에서 현재 SSH 세션이 백그라운드에서 실행되고 있음을 알 수 있습니다.
fg 명령을 사용하여 세션을 다시 시작하고 hostname 명령을 실행해 보겠습니다.
$ fg %1

불안정한 네트워크로 인해 세션이 중단될 때 발생하는 고정된 SSH 세션을 본 적이 있을 것입니다. 여기서 exit 명령을 사용하여 세션을 중단할 수 없습니다. 그러나 \~ + .\
키 시퀀스를 사용하여 종료할 수 있습니다.
먼저 원격 호스트에 로그인합니다.
$ ssh -l root 192.168.19.130
이제 \~ + .\
키 조합을 사용하여 현재 세션을 종료합니다.

이 예에서 SSH가 192.168.19.130에 대한 연결이 닫혔다는 메시지를 표시하는 것을 볼 수 있습니다.
한 가지 흥미로운 점은 지원되는 모든 이스케이프 시퀀스를 나열하는 이스케이프 시퀀스가 있다는 것입니다. \~ + ?
이스케이프 시퀀스를 사용하여 지원되는 이스케이프 시퀀스를 나열할 수 있습니다.

여기에서 도움말 메뉴에서 나오려면 Enter 키를 눌러야 합니다.
Linux에서 SSH를 구성하는 방법
이 섹션에서는 SSH 서버를 강화하기 위한 서버 측 구성에 대해 설명합니다. SSH 서버는 모든 구성을 /etc/ssh/sshd_config 파일에 저장합니다. SSH 구성을 업데이트하려면 루트 사용자 액세스가 필요합니다.
모범 사례로 SSH 연결을 설정하기 전에 항상 배너를 표시해야 합니다. 어떤 경우에는 권한이 없는 사용자가 원격 호스트에 액세스하지 못하도록 합니다. 이 설정을 활성화하는 방법을 단계별로 살펴보겠습니다.
먼저 경고 메시지가 있는 원격 서버에 텍스트 파일을 만듭니다.
# vi /etc/banner.txt
다음으로 다음 배너 메시지를 추가합니다.
********************************************************************* Warning !!! You are trying to log in to techmint.com's server. All the activities on this server are monitored. Terminate the session immediately if you are not an authorized user. *********************************************************************
다음으로 /etc/ssh/sshd_config 파일을 열고 배너 지시문으로 파일을 지정합니다.
Banner /etc/banner.txt
이제 sshd 서비스를 다시 시작하고 exit 명령을 사용하여 세션을 종료합니다.
# systemctl restart sshd # exit
마지막으로 원격 호스트에 로그인하여 배너를 확인합니다.
$ ssh -l root 192.168.19.130

여기에서 서버가 SSH 배너를 올바르게 표시하는지 확인할 수 있습니다.
지금까지 루트 사용자를 사용하여 원격 호스트에 액세스했습니다. 그러나 이는 최소 권한 원칙에 위배됩니다. 프로덕션 환경에서 루트 사용자 액세스는 보안 향상을 위해 항상 제한됩니다.
PermitRootLogin 지시문을 사용하여 루트 사용자 로그인을 비활성화할 수 있습니다.
먼저 /etc/ssh/sshd_config 파일을 열고 PermitRootLogin 지시문과 함께 no
옵션을 사용합니다.
PermitRootLogin no
이제 sshd 서비스를 다시 시작하고 exit 명령을 사용하여 세션을 종료합니다.
# systemctl restart sshd # exit
마지막으로 새 SSH 세션을 만들어 이를 확인합니다.
$ ssh -l root 192.168.19.130

여기에서 루트 사용자로 원격 호스트에 로그인할 수 없음을 관찰할 수 있습니다. 루트 사용자 로그인을 허용하려면 동일한 지시문과 함께 yes
옵션을 사용할 수 있습니다.
기본적으로 SSH는 TCP 포트 22를 사용합니다. 그러나 SSH를 다른 포트(예: 8088)에서 실행하도록 구성할 수 있습니다.
먼저 /etc/ssh/sshd_config 파일을 열고 Port 지시문과 함께 8088 값을 사용합니다.
Port 8088
그런 다음 sshd 서비스를 다시 시작하고 세션을 종료합니다.
# systemctl restart sshd # exit
이제 원격 호스트에 로그인해 보겠습니다.
$ ssh -p 8088 -l root 192.168.19.130

이 예에서는 -p
옵션을 사용하여 포트 번호를 지정했습니다.
어떤 경우에는 기본이 아닌 포트에서 통신을 허용하기 위해 몇 가지 다른 단계를 수행해야 합니다. 사용 가능한 포트 식별, 방화벽 규칙 업데이트, SELinux 설정 등
이 기사에서는 SSH 프로토콜과 일반적인 사용 사례에 대해 논의했습니다. 다음으로 몇 가지 일반적인 옵션에 대해 논의했습니다. 마지막으로 SSH 서버를 보호하기 위한 몇 가지 설정에 대해 논의했습니다.
Linux에서 다른 최고의 SSH 명령 사용법을 알고 있습니까? 아래 의견에 귀하의 의견을 알려주십시오.