웹사이트 검색

SSH Essentials: SSH 서버, 클라이언트 및 키 작업


소개

SSH는 Linux 서버에 원격으로 연결하는 기본 수단으로 사용되는 보안 프로토콜입니다. 원격 쉘을 생성하여 텍스트 기반 인터페이스를 제공합니다. 연결 후 로컬 터미널에 입력하는 모든 명령은 원격 서버로 전송되어 실행됩니다.

이 치트 시트 스타일 가이드에서는 목표를 달성하기 위해 SSH와 연결하는 몇 가지 일반적인 방법을 다룹니다. 이것은 다양한 방식으로 서버에 연결하거나 서버를 구성하는 방법을 알아야 할 때 빠른 참조로 사용할 수 있습니다.

이 가이드를 사용하는 방법

  • 일반적으로 SSH에 익숙하지 않거나 이제 막 시작하는 경우 SSH 개요 섹션을 먼저 읽으십시오.
  • 달성하려는 항목에 해당하는 후속 섹션을 사용하십시오. 대부분의 섹션은 다른 섹션을 기반으로 하지 않으므로 다음 예를 독립적으로 사용할 수 있습니다.
  • 이 페이지의 왼쪽에 있는 콘텐츠 메뉴(넓은 페이지 너비) 또는 브라우저의 찾기 기능을 사용하여 필요한 섹션을 찾으십시오.
  • 주어진 명령줄 예제를 복사하여 붙여넣고 강조 표시된 값을 자신의 값으로 바꿉니다.

SSH 개요

원격 Linux 서버에 연결하는 가장 일반적인 방법은 SSH를 사용하는 것입니다. SSH는 Secure Shell의 약자로 원격으로 명령을 실행하고 변경하고 서비스를 구성하는 안전하고 안전한 방법을 제공합니다. SSH를 통해 연결하는 경우 원격 서버에 존재하는 계정을 사용하여 로그인합니다.

SSH 작동 방식

SSH를 통해 연결하면 서버와 상호 작용할 수 있는 텍스트 기반 인터페이스인 셸 세션으로 연결됩니다. SSH 세션이 진행되는 동안 로컬 터미널에 입력하는 모든 명령은 암호화된 SSH 터널을 통해 전송되어 서버에서 실행됩니다.

SSH 연결은 클라이언트-서버 모델을 사용하여 구현됩니다. 즉, SSH 연결을 설정하려면 원격 시스템에서 SSH 데몬이라는 소프트웨어를 실행해야 합니다. 이 소프트웨어는 특정 네트워크 포트에서 연결을 수신하고 연결 요청을 인증하며 사용자가 올바른 자격 증명을 제공하는 경우 적절한 환경을 생성합니다.

사용자의 컴퓨터에 SSH 클라이언트가 있어야 합니다. 이것은 SSH 프로토콜을 사용하여 통신하는 방법을 알고 있으며 연결할 원격 호스트, 사용할 사용자 이름 및 인증을 위해 전달해야 하는 자격 증명에 대한 정보를 제공받을 수 있는 소프트웨어입니다. 클라이언트는 설정하려는 연결 유형에 대한 특정 세부 정보를 지정할 수도 있습니다.

SSH가 사용자를 인증하는 방법

클라이언트는 일반적으로 비밀번호(보안 수준이 낮고 권장되지 않음) 또는 매우 안전한 SSH 키를 사용하여 인증합니다.

비밀번호 로그인은 암호화되어 신규 사용자가 이해하기 쉽습니다. 그러나 자동화된 봇과 악의적인 사용자는 종종 암호 기반 로그인을 허용하는 계정에 대해 반복적으로 인증을 시도하므로 보안이 손상될 수 있습니다. 이러한 이유로 대부분의 구성에 대해 항상 SSH 키 기반 인증을 설정하는 것이 좋습니다.

SSH 키는 인증에 사용할 수 있는 일치하는 암호화 키 집합입니다. 각 세트에는 공개 키와 개인 키가 포함되어 있습니다. 공개 키는 걱정 없이 자유롭게 공유할 수 있는 반면 개인 키는 신중하게 보호해야 하며 누구에게도 노출되지 않아야 합니다.

SSH 키를 사용하여 인증하려면 사용자는 로컬 컴퓨터에 SSH 키 쌍이 있어야 합니다. 원격 서버에서 공개 키는 ~/.ssh/authorized_keys에 있는 사용자의 홈 디렉터리에 있는 파일에 복사해야 합니다. 이 파일에는 이 계정에 로그인할 수 있는 공개 키 목록이 한 줄에 하나씩 포함되어 있습니다.

클라이언트가 호스트에 연결하여 SSH 키 인증을 사용하려고 하면 서버에 이 의도를 알리고 사용할 공개 키를 서버에 알려줍니다. 그런 다음 서버는 authorized_keys 파일에서 공개 키를 확인하고 임의의 문자열을 생성한 다음 공개 키를 사용하여 암호화합니다. 이 암호화된 메시지는 연결된 개인 키로만 해독할 수 있습니다. 서버는 이 암호화된 메시지를 클라이언트에 보내어 연결된 개인 키가 실제로 있는지 테스트합니다.

이 메시지를 수신하면 클라이언트는 개인 키를 사용하여 메시지를 해독하고 이전에 협상된 세션 ID와 함께 공개된 임의의 문자열을 결합합니다. 그런 다음 이 값의 MD5 해시를 생성하고 서버로 다시 전송합니다. 서버에는 이미 원본 메시지와 세션 ID가 있으므로 해당 값으로 생성된 MD5 해시를 비교하고 클라이언트에 개인 키가 있어야 한다고 결정할 수 있습니다.

이제 SSH 작동 방식을 알았으므로 SSH로 작업하는 다양한 방법을 보여주는 몇 가지 예를 논의할 수 있습니다.

SSH 키 생성 및 작업

이 섹션에서는 클라이언트 시스템에서 SSH 키를 생성하고 사용되어야 하는 서버에 공개 키를 배포하는 방법을 설명합니다. 향후 연결을 허용하는 향상된 보안으로 인해 이전에 키를 생성하지 않은 경우 시작하기에 좋은 섹션입니다.

SSH 키 쌍 생성

로컬 컴퓨터에서 새 SSH 공개 및 개인 키 쌍을 생성하는 것은 암호 없이 원격 서버로 인증하기 위한 첫 번째 단계입니다. 합당한 이유가 없는 한 항상 SSH 키를 사용하여 인증해야 합니다.

RSA, DSA 및 ECDSA를 포함하여 여러 암호화 알고리즘을 사용하여 SSH 키를 생성할 수 있습니다. RSA 키는 일반적으로 선호되며 기본 키 유형입니다.

로컬 컴퓨터에서 RSA 키 쌍을 생성하려면 다음을 입력하십시오.

  1. ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

이 메시지를 통해 RSA 개인 키를 저장할 위치를 선택할 수 있습니다. ENTER를 눌러 기본값으로 두십시오. 이렇게 하면 사용자 홈 디렉토리의 .ssh 숨겨진 디렉토리에 저장됩니다. 선택된 기본 위치를 그대로 두면 SSH 클라이언트가 자동으로 키를 찾을 수 있습니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

다음 프롬프트에서는 개인 키를 보호하기 위해 임의 길이의 암호를 입력할 수 있습니다. 기본적으로 추가 보안 조치로 개인 키를 사용할 때마다 여기에서 설정한 암호를 입력해야 합니다. 암호를 원하지 않는 경우 ENTER를 눌러 공백으로 두십시오. 이렇게 하면 개인 키를 제어할 수 있는 사람은 누구나 서버에 로그인할 수 있습니다.

암호를 입력하도록 선택하면 입력할 때 아무 것도 표시되지 않습니다. 이는 보안 예방 조치입니다.

Output
Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | + | | o S . | | o . * + | | o + = O . | | + = = + | | ....Eo+ | +-----------------+

이 절차는 사용자 홈 디렉토리 내의 .ssh 숨겨진 디렉토리에 있는 RSA SSH 키 쌍을 생성했습니다. 이러한 파일은 다음과 같습니다.

  • ~/.ssh/id_rsa: 개인 키입니다. 이 파일을 공유하지 마십시오!
  • ~/.ssh/id_rsa.pub: 연결된 공개 키입니다. 결과 없이 자유롭게 공유할 수 있습니다.

더 많은 수의 비트로 SSH 키 쌍 생성

SSH 키는 기본적으로 2048비트입니다. 이것은 일반적으로 보안에 충분하다고 간주되지만 보다 강화된 키에 대해 더 많은 비트 수를 지정할 수 있습니다.

이렇게 하려면 원하는 비트 수와 함께 -b 인수를 포함하십시오. 대부분의 서버는 길이가 4096비트 이상인 키를 지원합니다. DDOS 보호 목적으로 더 긴 키는 허용되지 않을 수 있습니다.

  1. ssh-keygen -b 4096

이전에 다른 키를 만든 경우 이전 키를 덮어쓸 것인지 묻는 메시지가 표시됩니다.

Overwrite (y/n)?

"예\를 선택하면 이전 키를 덮어쓰게 되고 더 이상 해당 키를 사용하여 서버에 로그인할 수 없게 됩니다. 따라서 키를 덮어쓸 때는 주의해야 합니다.

개인 키의 암호 제거 또는 변경

개인 키에 대한 암호를 생성하고 이를 변경하거나 제거하려는 경우 쉽게 수행할 수 있습니다.

참고: 암호를 변경하거나 제거하려면 원래 암호를 알아야 합니다. 키에 대한 암호를 분실한 경우 사용할 방법이 없으며 새 키 쌍을 생성해야 합니다.

암호를 변경하거나 제거하려면 다음을 입력하십시오.

  1. ssh-keygen -p
Enter file in which the key is (/root/.ssh/id_rsa):

수정하려는 키의 위치를 입력하거나 ENTER를 눌러 기본값을 수락할 수 있습니다.

Enter old passphrase:

변경할 이전 암호를 입력합니다. 그러면 새 암호를 입력하라는 메시지가 표시됩니다.

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

여기에 새 암호를 입력하거나 ENTER를 눌러 암호를 제거하십시오.

SSH 키 지문 표시

각 SSH 키 쌍은 키를 고유하게 식별하는 데 사용할 수 있는 단일 암호화 "지문\을 공유합니다. 이는 다양한 상황에서 유용할 수 있습니다.

SSH 키의 지문을 찾으려면 다음을 입력하십시오.

  1. ssh-keygen -l
Enter file in which the key is (/root/.ssh/id_rsa):

키의 올바른 위치인 경우 ENTER를 누르고 그렇지 않으면 수정된 위치를 입력할 수 있습니다. 키의 비트 길이, 지문, 키가 생성된 계정 및 호스트, 사용된 알고리즘을 포함하는 문자열이 제공됩니다.

Output
4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e demo@test (RSA)

SSH-Copy-ID를 사용하여 공개 SSH 키를 서버에 복사

공개 키를 서버에 복사하여 암호 없이 인증할 수 있도록 하려면 여러 가지 방법을 사용할 수 있습니다.

현재 서버에 대한 암호 기반 SSH 액세스가 구성되어 있고 ssh-copy-id 유틸리티가 설치되어 있는 경우 이는 간단한 프로세스입니다. ssh-copy-id 도구는 많은 Linux 배포판의 OpenSSH 패키지에 포함되어 있으므로 기본적으로 설치될 가능성이 큽니다.

이 옵션이 있는 경우 다음을 입력하여 공개 키를 쉽게 전송할 수 있습니다.

  1. ssh-copy-id username@remote_host

그러면 원격 시스템에서 사용자 계정의 비밀번호를 묻는 메시지가 표시됩니다.

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
demo@111.111.11.111's password:

암호를 입력하면 ~/.ssh/id_rsa.pub 키의 내용이 사용자 계정의 ~/.ssh/authorized_keys 파일 끝에 추가됩니다. :

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'demo@111.111.11.111'" and check to make sure that only the key(s) you wanted were added.

이제 비밀번호 없이 해당 계정에 로그인할 수 있습니다.

  1. ssh username@remote_host

SSH-Copy-ID 없이 공개 SSH 키를 서버에 복사

ssh-copy-id 유틸리티를 사용할 수 없지만 여전히 원격 서버에 대한 암호 기반 SSH 액세스 권한이 있는 경우 공개 키의 콘텐츠를 다른 방식으로 복사할 수 있습니다.

키의 내용을 출력하고 ssh 명령으로 파이프할 수 있습니다. 원격 측에서 ~/.ssh 디렉토리가 있는지 확인한 다음 파이프된 내용을 ~/.ssh/authorized_keys 파일에 추가할 수 있습니다.

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

원격 계정의 비밀번호를 입력하라는 메시지가 표시됩니다.

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
demo@111.111.11.111's password:

비밀번호를 입력하면 키가 복사되어 비밀번호 없이 로그인할 수 있습니다.

  1. ssh username@remote_IP_host

공개 SSH 키를 서버에 수동으로 복사

암호 기반 SSH 액세스를 사용할 수 없는 경우 공개 키를 원격 서버에 수동으로 추가해야 합니다.

로컬 시스템에서 다음을 입력하여 공개 키 파일의 내용을 찾을 수 있습니다.

  1. cat ~/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

이 값을 복사하여 원격 서버의 적절한 위치에 수동으로 붙여넣을 수 있습니다. 다른 방법(예: DigitalOcean 웹 콘솔)을 통해 원격 서버에 로그인해야 합니다.

원격 서버에서 ~/.ssh 디렉토리가 아직 없으면 생성합니다.

  1. mkdir -p ~/.ssh

그런 다음 다음을 입력하여 ~/.ssh/authorized_keys 파일을 생성하거나 추가할 수 있습니다.

  1. echo public_key_string >> ~/.ssh/authorized_keys

이제 암호 없이 원격 서버에 로그인할 수 있습니다.

기본 연결 지침

다음 섹션에서는 SSH를 사용하여 서버에 연결하는 방법에 대한 몇 가지 기본 사항을 다룹니다.

원격 서버에 연결

원격 서버에 연결하고 그곳에서 셸 세션을 열려면 ssh 명령을 사용할 수 있습니다.

가장 간단한 형태는 로컬 시스템의 사용자 이름이 원격 서버의 사용자 이름과 동일하다고 가정합니다. 이것이 사실이라면 다음을 사용하여 연결할 수 있습니다.

  1. ssh remote_host

원격 서버에서 사용자 이름이 다른 경우 다음과 같이 원격 사용자의 이름을 전달해야 합니다.

  1. ssh username@remote_host

새 호스트에 처음 연결하면 다음과 같은 메시지가 표시됩니다.

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

원격 호스트의 인증을 수락하려면 yes를 입력하십시오.

암호 인증을 사용하는 경우 여기에서 원격 계정의 암호를 입력하라는 메시지가 표시됩니다. SSH 키를 사용하는 경우 개인 키의 암호가 설정되어 있으면 입력하라는 메시지가 표시되고 그렇지 않으면 자동으로 로그인됩니다.

원격 서버에서 단일 명령 실행

셸 세션을 생성하는 대신 원격 서버에서 단일 명령을 실행하려면 다음과 같이 연결 정보 뒤에 명령을 추가할 수 있습니다.

  1. ssh username@remote_host command_to_run

그러면 원격 호스트에 연결되고 자격 증명으로 인증되며 지정한 명령이 실행됩니다. 그러면 연결이 즉시 종료됩니다.

다른 포트로 서버에 로그인

기본적으로 서버의 SSH 데몬은 포트 22에서 실행됩니다. SSH 클라이언트는 연결을 시도할 때 이것이 사실이라고 가정합니다. SSH 서버가 비표준 포트에서 수신하는 경우(나중에 설명됨) 클라이언트에 연결할 때 새 포트 번호를 지정해야 합니다.

-p 옵션으로 포트 번호를 지정하여 이를 수행할 수 있습니다.

  1. ssh -p port_num username@remote_host

원격 서버에 로그인할 때마다 이 작업을 수행하지 않으려면 로컬 컴퓨터의 홈 디렉터리에 있는 ~/.ssh 디렉터리에서 구성 파일을 만들거나 편집할 수 있습니다.

다음을 입력하여 지금 파일을 편집하거나 생성합니다.

  1. nano ~/.ssh/config

여기에서 호스트별 구성 옵션을 설정할 수 있습니다. 새 포트를 지정하려면 다음과 같은 형식을 사용하십시오.

Host remote_alias
    HostName remote_host
    Port port_num

이렇게 하면 명령줄에서 특정 포트 번호를 지정하지 않고 로그인할 수 있습니다.

암호를 입력하지 않도록 SSH 에이전트에 SSH 키 추가

개인 SSH 키에 암호가 있는 경우 암호를 사용하여 원격 호스트에 연결할 때마다 암호를 입력하라는 메시지가 표시됩니다.

이 작업을 반복적으로 수행하지 않으려면 SSH 에이전트를 실행할 수 있습니다. 이 작은 유틸리티는 암호를 처음 입력한 후 개인 키를 저장합니다. 터미널 세션 동안 사용할 수 있으므로 나중에 암호를 다시 입력하지 않고도 연결할 수 있습니다.

이는 SSH 자격 증명을 전달해야 하는 경우에도 중요합니다(나중에 표시됨).

SSH 에이전트를 시작하려면 로컬 터미널 세션에 다음을 입력하십시오.

  1. eval $(ssh-agent)
Output
Agent pid 10891

이렇게 하면 에이전트 프로그램이 시작되고 백그라운드에 배치됩니다. 이제 개인 키를 에이전트에 추가하여 키를 관리할 수 있도록 해야 합니다.

  1. ssh-add
Enter passphrase for /home/demo/.ssh/id_rsa:
Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)

암호를 입력해야 합니다(설정된 경우). 그런 다음 ID 파일이 에이전트에 추가되어 암호를 다시 입력하지 않고도 키를 사용하여 로그인할 수 있습니다.

서버에서 사용할 SSH 자격 증명 전달

다른 서버 내에서 한 서버에 암호 없이 연결할 수 있으려면 SSH 키 정보를 전달해야 합니다. 이렇게 하면 로컬 컴퓨터의 자격 증명을 사용하여 연결된 서버를 통해 다른 서버에 인증할 수 있습니다.

시작하려면 SSH 에이전트를 시작하고 SSH 키를 에이전트에 추가해야 합니다(이전 참조). 이 작업이 완료되면 -A 옵션을 사용하여 첫 번째 서버에 연결해야 합니다. 그러면 이 세션에 대한 자격 증명이 서버로 전달됩니다.

  1. ssh -A username@remote_host

여기에서 SSH 키가 액세스 권한이 있는 다른 호스트에 SSH로 연결할 수 있습니다. 개인 SSH 키가 이 서버에 있는 것처럼 연결됩니다.

서버 측 구성 옵션

이 섹션에는 서버가 응답하는 방식과 허용되는 연결 유형을 지정할 수 있는 몇 가지 일반적인 서버 측 구성 옵션이 포함되어 있습니다.

암호 인증 비활성화

SSH 키가 구성, 테스트 및 제대로 작동하는 경우 암호 인증을 비활성화하는 것이 좋습니다. 이렇게 하면 사용자가 암호를 사용하여 SSH로 로그인하는 것을 방지할 수 있습니다.

이렇게 하려면 원격 서버에 연결하고 루트 또는 sudo 권한으로 /etc/ssh/sshd_config 파일을 엽니다.

  1. sudo nano /etc/ssh/sshd_config

파일 내에서 PasswordAuthentication 지시문을 검색합니다. 주석 처리된 경우 주석을 제거하십시오. 암호 로그인을 비활성화하려면 no로 설정합니다.

PasswordAuthentication no

변경한 후 파일을 저장하고 닫습니다. 변경 사항을 구현하려면 SSH 서비스를 다시 시작해야 합니다.

우분투/데비안:

  1. sudo service ssh restart

CentOS/Fedora에서:

  1. sudo service sshd restart

이제 시스템의 모든 계정은 암호를 사용하여 SSH로 로그인할 수 없습니다.

SSH 데몬이 실행되는 포트 변경

일부 관리자는 SSH가 실행되는 기본 포트를 변경할 것을 제안합니다. 이렇게 하면 자동화된 봇의 서버 인증 시도 횟수를 줄이는 데 도움이 될 수 있습니다.

SSH 데몬이 청취하는 포트를 변경하려면 원격 서버에 로그인해야 합니다. 해당 사용자로 로그인하거나 sudo를 사용하여 루트 권한으로 원격 시스템에서 sshd_config 파일을 엽니다.

  1. sudo nano /etc/ssh/sshd_config

안으로 들어가면 포트 22 사양을 찾아 사용하려는 포트를 반영하도록 수정하여 SSH가 실행되는 포트를 변경할 수 있습니다. 예를 들어 포트를 4444로 변경하려면 파일에 다음을 입력합니다.

#Port 22
Port 4444

완료되면 파일을 저장하고 닫습니다. 변경 사항을 구현하려면 SSH 데몬을 다시 시작해야 합니다.

우분투/데비안:

  1. sudo service ssh restart

CentOS/Fedora에서:

  1. sudo service sshd restart

데몬이 다시 시작되면 포트 번호를 지정하여 인증해야 합니다(이전 섹션에서 설명).

SSH를 통해 연결할 수 있는 사용자 제한

SSH를 통해 로그인할 수 있는 사용자 계정을 명시적으로 제한하려면 몇 가지 접근 방식을 취할 수 있으며 각 접근 방식에는 SSH 데몬 구성 파일 편집이 포함됩니다.

원격 서버에서 이제 루트 또는 sudo 권한으로 이 파일을 엽니다.

  1. sudo nano /etc/ssh/sshd_config

로그인이 허용되는 계정을 지정하는 첫 번째 방법은 AllowUsers 지시문을 사용하는 것입니다. 파일에서 AllowUsers 지시문을 검색합니다. 존재하지 않는 경우 아무 곳에나 만드십시오. 지시어 뒤에 SSH를 통해 로그인할 수 있는 사용자 계정을 나열합니다.

AllowUsers user1 user2

파일을 저장하고 닫습니다. 변경 사항을 구현하려면 데몬을 다시 시작하십시오.

우분투/데비안:

  1. sudo service ssh restart

CentOS/Fedora에서:

  1. sudo service sshd restart

그룹 관리가 더 편하다면 AllowGroups 지시문을 대신 사용할 수 있습니다. 이 경우 SSH 액세스를 허용해야 하는 단일 그룹을 추가하기만 하면 됩니다(이 그룹을 만들고 구성원을 잠시 추가함).

AllowGroups sshmembers

파일을 저장하고 닫습니다.

이제 다음을 입력하여 지정한 그룹과 일치하는 시스템 그룹(홈 디렉토리 없이)을 만들 수 있습니다.

  1. sudo groupadd -r sshmembers

이 그룹에 필요한 모든 사용자 계정을 추가했는지 확인하십시오. 다음을 입력하여 수행할 수 있습니다.

  1. sudo usermod -a -G sshmembers user1
  2. sudo usermod -a -G sshmembers user2

이제 SSH 데몬을 다시 시작하여 변경 사항을 구현하십시오.

우분투/데비안:

  1. sudo service ssh restart

CentOS/Fedora에서:

  1. sudo service sshd restart

루트 로그인 비활성화

sudo 권한이 있는 SSH 사용자 계정을 설정한 후 SSH를 통한 루트 로그인을 완전히 비활성화하는 것이 좋습니다.

이렇게 하려면 원격 서버에서 root 또는 sudo로 SSH 데몬 구성 파일을 엽니다.

  1. sudo nano /etc/ssh/sshd_config

내부에서 PermitRootLogin이라는 지시문을 검색합니다. 주석이 있으면 주석을 제거하십시오. 값을 "no\로 변경합니다.

PermitRootLogin no

파일을 저장하고 닫습니다. 변경 사항을 구현하려면 SSH 데몬을 다시 시작하십시오.

우분투/데비안:

  1. sudo service ssh restart

CentOS/Fedora에서:

  1. sudo service sshd restart

특정 명령에 대한 루트 액세스 허용

일반적으로 루트 액세스를 비활성화하고 싶지만 특정 응용 프로그램이 올바르게 실행되도록 하려면 활성화해야 하는 경우가 있습니다. 예를 들어 백업 루틴을 들 수 있습니다.

이는 계정을 사용하도록 승인된 SSH 키가 포함된 루트 사용자의 authorized_keys 파일을 통해 수행할 수 있습니다.

이 프로세스에 사용하려는 로컬 컴퓨터의 키를 서버에 있는 루트 사용자의 authorized_keys 파일에 추가합니다(자동 프로세스마다 새 키 생성 권장). 여기에서는 ssh-copy-id 명령을 사용하여 시연하지만 다른 섹션에서 논의한 키 복사 방법을 사용할 수 있습니다.

  1. ssh-copy-id root@remote_host

이제 원격 서버에 로그인하십시오. authorized_keys 파일의 항목을 조정해야 하므로 루트 또는 sudo 액세스로 엽니다.

  1. sudo nano /root/.ssh/authorized_keys

업로드한 키가 있는 줄의 시작 부분에 이 키가 유효한 명령을 정의하는 command= 목록을 추가합니다. 여기에는 실행 파일의 전체 경로와 인수가 포함되어야 합니다.

command="/path/to/command arg1 arg2" ssh-rsa ...

완료되면 파일을 저장하고 닫습니다.

이제 루트 또는 sudo 권한으로 sshd_config 파일을 엽니다.

  1. sudo nano /etc/ssh/sshd_config

지시문 PermitRootLogin을 찾아 값을 forced-commands-only로 변경합니다. 이렇게 하면 키에 대한 명령이 지정된 경우에만 SSH 키 로그인이 루트를 사용할 수 있습니다.

PermitRootLogin forced-commands-only

파일을 저장하고 닫습니다. 변경 사항을 구현하려면 SSH 데몬을 다시 시작하십시오.

우분투/데비안:

  1. sudo service ssh restart

CentOS/Fedora에서:

  1. sudo service sshd restart

X 응용 프로그램 디스플레이를 클라이언트에 전달

SSH 데몬은 서버의 X 응용 프로그램 표시를 클라이언트 시스템에 자동으로 전달하도록 구성할 수 있습니다. 이 기능이 제대로 작동하려면 클라이언트에 X Windows 시스템이 구성되고 활성화되어 있어야 합니다.

이 기능을 활성화하려면 원격 서버에 로그인하고 루트로 또는 sudo 권한으로 sshd_config 파일을 편집합니다.

  1. sudo nano /etc/ssh/sshd_config

X11Forwarding 지시문을 검색합니다. 주석 처리된 경우 주석을 제거하십시오. 필요한 경우 생성하고 값을 "yes\로 설정합니다.

X11Forwarding yes

파일을 저장하고 닫습니다. 이러한 변경 사항을 구현하려면 SSH 데몬을 다시 시작하십시오.

우분투/데비안:

  1. sudo service ssh restart

CentOS/Fedora에서:

  1. sudo service sshd restart

서버에 연결하고 애플리케이션의 디스플레이를 전달하려면 연결 시 클라이언트에서 -X 옵션을 전달해야 합니다.

  1. ssh -X username@remote_host

이 세션을 통해 서버에서 시작된 그래픽 응용 프로그램은 로컬 컴퓨터에 표시되어야 합니다. 성능이 약간 느릴 수 있지만 핀치에 매우 유용합니다.

클라이언트 측 구성 옵션

다음 섹션에서는 연결의 클라이언트 측에서 수행할 수 있는 몇 가지 조정에 중점을 둘 것입니다.

서버별 연결 정보 정의

로컬 컴퓨터에서 연결하는 일부 또는 모든 서버에 대한 개별 구성을 정의할 수 있습니다. 이는 SSH 클라이언트가 호출될 때마다 읽는 ~/.ssh/config 파일에 저장할 수 있습니다.

로컬 컴퓨터의 텍스트 편집기에서 이 파일을 만들거나 엽니다.

  1. nano ~/.ssh/config

내부에서 각 구성 옵션을 Host 키워드와 별칭으로 도입하여 개별 구성 옵션을 정의할 수 있습니다. 이것과 들여쓰기 아래에서 ssh_config 매뉴얼 페이지에 있는 모든 지시문을 정의할 수 있습니다.

  1. man ssh_config

예시 구성은 다음과 같습니다.

Host testhost
    HostName your_domain
    Port 4444
    User demo

그런 다음 간단히 입력하여 사용자 이름 demo를 사용하여 포트 4444에서 your_domain에 연결할 수 있습니다.

  1. ssh testhost

와일드카드를 사용하여 둘 이상의 호스트를 일치시킬 수도 있습니다. 나중 일치는 이전 일치를 무시할 수 있음을 명심하십시오. 이 때문에 가장 일반적인 일치 항목을 맨 위에 두어야 합니다. 예를 들어 파일에 다음을 포함하여 your_domain을 재정의하여 X 전달을 허용하지 않도록 모든 연결을 기본값으로 설정할 수 있습니다.

Host *
    ForwardX11 no

Host testhost
    HostName your_domain
    ForwardX11 yes
    Port 4444
    User demo

완료되면 파일을 저장하고 닫습니다.

시간 초과를 피하기 위해 연결을 활성 상태로 유지

준비가 되기 전에 SSH 세션에서 연결이 끊어지면 연결 시간이 초과되었을 수 있습니다.

이러한 상황을 피하기 위해 서버에 패킷을 자주 보내도록 클라이언트를 구성할 수 있습니다.

로컬 컴퓨터에서 ~/.ssh/config 파일을 편집하여 모든 연결에 대해 이를 구성할 수 있습니다. 지금 열기:

  1. nano ~/.ssh/config

아직 존재하지 않는 경우 파일 맨 위에서 모든 호스트와 일치하는 섹션을 정의합니다. ServerAliveInterval을 "120”으로 설정하여 2분마다 서버에 패킷을 보냅니다. 연결을 닫지 않도록 서버에 알리기에 충분해야 합니다.

Host *
    ServerAliveInterval 120

완료되면 파일을 저장하고 닫습니다.

호스트 확인 비활성화

기본적으로 새 서버에 연결할 때마다 원격 SSH 데몬의 호스트 키 지문이 표시됩니다.

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

이는 연결하려는 호스트의 신뢰성을 확인하고 악의적인 사용자가 원격 호스트로 가장하려고 시도하는 인스턴스를 찾을 수 있도록 구성됩니다.

특정 상황에서 이 기능을 비활성화할 수 있습니다. 참고: 이것은 큰 보안 위험이 될 수 있으므로 시스템을 이와 같이 설정하는 경우 수행 중인 작업을 알고 있어야 합니다.

변경하려면 로컬 컴퓨터에서 ~/.ssh/config 파일을 엽니다.

  1. nano ~/.ssh/config

아직 존재하지 않는 경우 파일 맨 위에서 모든 호스트와 일치하는 섹션을 정의합니다. 새 호스트를 known_hosts 파일에 자동으로 추가하려면 StrictHostKeyChecking 지시문을 no로 설정합니다. 새 호스트나 변경된 호스트에 대해 경고하지 않도록 UserKnownHostsFile/dev/null로 설정합니다.

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

다른 호스트에 대해 해당 옵션을 반대로 설정하여 사례별로 검사를 활성화할 수 있습니다. StrictHostKeyChecking의 기본값은 ask입니다.

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host testhost
    HostName your_domain
    StrictHostKeyChecking ask
    UserKnownHostsFile /home/demo/.ssh/known_hosts

단일 TCP 연결을 통한 멀티플렉싱 SSH

새 TCP 연결 설정이 원하는 것보다 오래 걸릴 수 있는 상황이 있습니다. 동일한 시스템에 여러 연결을 만드는 경우 멀티플렉싱을 활용할 수 있습니다.

SSH 멀티플렉싱은 여러 SSH 세션에 대해 동일한 TCP 연결을 재사용합니다. 이렇게 하면 새 세션을 설정하는 데 필요한 일부 작업이 제거되어 작업 속도가 빨라질 수 있습니다. 연결 수를 제한하는 것도 다른 이유로 도움이 될 수 있습니다.

멀티플렉싱을 설정하려면 연결을 수동으로 설정하거나 사용 가능한 경우 자동으로 멀티플렉싱을 사용하도록 클라이언트를 구성할 수 있습니다. 여기서는 두 번째 옵션을 보여드리겠습니다.

멀티플렉싱을 구성하려면 로컬 시스템에서 SSH 클라이언트의 구성 파일을 편집합니다.

  1. nano ~/.ssh/config

파일 맨 위에 와일드카드 호스트 정의가 아직 없는 경우 지금 추가하십시오(Host *로). 다중화 구성을 설정하기 위해 ControlMaster, ControlPathControlPersist 값을 설정합니다.

가능한 경우 자동으로 멀티플렉싱을 허용하려면 ControlMaster를 "자동\으로 설정해야 합니다. ControlPath는 제어 소켓에 대한 경로를 설정합니다. 첫 번째 세션에서 이 소켓을 생성합니다. 사용자 이름, 호스트 및 포트로 레이블이 지정되어 있으므로 후속 세션에서 찾을 수 있습니다.

ControlPersist 옵션을 1로 설정하면 초기 마스터 연결을 백그라운드로 설정할 수 있습니다. 1은 마지막 SSH 세션이 닫힌 후 1초 후에 TCP 연결이 자동으로 종료되도록 지정합니다.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/multiplex/%r@%h:%p
    ControlPersist 1

완료되면 파일을 저장하고 닫습니다. 이제 제어 경로에 지정한 디렉토리를 실제로 생성해야 합니다.

  1. mkdir ~/.ssh/multiplex

이제 동일한 시스템으로 설정된 모든 세션은 기존 소켓 및 TCP 연결을 사용하려고 시도합니다. 마지막 세션이 존재하면 1초 후에 연결이 끊어집니다.

어떤 이유로 멀티플렉싱 구성을 일시적으로 우회해야 하는 경우 none과 함께 -S 플래그를 전달하여 수행할 수 있습니다.

  1. ssh -S none username@remote_host

SSH 터널 설정

보안 SSH 터널을 통해 다른 트래픽을 터널링하는 것은 제한적인 방화벽 설정을 해결하는 훌륭한 방법입니다. 또한 암호화되지 않은 네트워크 트래픽을 암호화하는 좋은 방법이기도 합니다.

서버에 대한 로컬 터널링 구성

SSH 연결을 사용하여 로컬 호스트의 포트에서 원격 호스트의 포트로 트래픽을 터널링할 수 있습니다.

로컬 연결은 원격 호스트를 통해 로컬 컴퓨터에서 네트워크 위치에 액세스하는 방법입니다. 먼저 원격 호스트에 대한 SSH 연결이 설정됩니다. 원격 서버에서 사용자가 제공한 외부(또는 내부) 네트워크 주소에 연결되고 이 위치에 대한 트래픽이 지정된 포트의 로컬 컴퓨터로 터널링됩니다.

이는 종종 방화벽을 우회하여 덜 제한된 네트워킹 환경으로 터널링하는 데 사용됩니다. 또 다른 일반적인 용도는 원격 위치에서 "localhost-only\ 웹 인터페이스에 액세스하는 것입니다.

원격 서버에 대한 로컬 터널을 설정하려면 연결할 때 -L 매개변수를 사용해야 하며 세 가지 추가 정보를 제공해야 합니다.

  • 터널링된 연결에 액세스하려는 로컬 포트
  • 원격 호스트에 연결할 호스트.
  • 원격 호스트에 연결할 포트.

이들은 -L 플래그에 대한 인수로 위의 순서대로(콜론으로 구분됨) 제공됩니다. 또한 -f 플래그를 사용하여 SSH를 실행하기 전에 백그라운드로 들어가게 하고 -N 플래그를 사용하여 쉘을 열거나 프로그램을 실행하지 않습니다. 먼 쪽.

예를 들어 원격 호스트의 포트 80에서 your_domain에 연결하여 포트 8888의 로컬 시스템에서 연결을 사용할 수 있도록 하려면 다음을 입력할 수 있습니다.

  1. ssh -f -N -L 8888:your_domain:80 username@remote_host

이제 로컬 웹 브라우저에서 127.0.0.1:8888을 가리키면 포트 80your_domain에 있는 모든 콘텐츠를 볼 수 있습니다.

구문에 대한 보다 일반적인 가이드는 다음과 같습니다.

  1. ssh -L your_port:site_or_IP_to_access:site_port username@host

연결이 백그라운드에 있으므로 연결을 끊으려면 PID를 찾아야 합니다. 전달한 포트를 검색하면 됩니다.

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:your_domain:80 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

그런 다음 SSH 명령과 일치하는 줄의 두 번째 열에 있는 번호인 PID를 대상으로 프로세스를 종료할 수 있습니다.

  1. kill 5965

다른 옵션은 -f 플래그 없이 연결을 시작하는 것입니다. 이렇게 하면 포그라운드에서 연결이 유지되어 전달되는 동안 터미널 창을 사용할 수 없습니다. 이것의 이점은 CTRL-C를 입력하여 터널을 쉽게 종료할 수 있다는 것입니다.

서버에 대한 원격 터널링 구성

SSH 연결을 사용하여 로컬 호스트의 포트에서 원격 호스트의 포트로 트래픽을 터널링할 수 있습니다.

원격 터널에서 원격 호스트에 연결됩니다. 터널을 만드는 동안 원격 포트가 지정됩니다. 원격 호스트의 이 포트는 로컬 컴퓨터에서 연결된 호스트 및 포트 조합으로 터널링됩니다. 이렇게 하면 원격 컴퓨터가 로컬 컴퓨터를 통해 호스트에 액세스할 수 있습니다.

이는 외부 연결에 대해 잠겨 있는 내부 네트워크에 대한 액세스를 허용해야 하는 경우에 유용할 수 있습니다. 방화벽이 네트워크 외부 연결을 허용하는 경우 원격 시스템에 연결하고 해당 시스템에서 내부 네트워크 위치로 트래픽을 터널링할 수 있습니다.

원격 서버에 대한 원격 터널을 설정하려면 연결할 때 -R 매개변수를 사용해야 하며 세 가지 추가 정보를 제공해야 합니다.

  • 원격 호스트가 터널링된 연결에 액세스할 수 있는 포트입니다.
  • 로컬 컴퓨터를 연결할 호스트.
  • 로컬 컴퓨터를 연결할 포트.

위의 순서대로(콜론으로 구분) -R 플래그에 대한 인수로 제공됩니다. 또한 -f 플래그를 사용하여 SSH를 실행하기 전에 백그라운드로 들어가게 하고 -N 플래그를 사용하여 쉘을 열거나 프로그램을 실행하지 않습니다. 먼 쪽.

예를 들어 로컬 컴퓨터의 포트 80에서 your_domain에 연결하여 포트 8888의 원격 호스트에서 연결을 사용할 수 있도록 하려면 다음을 입력할 수 있습니다.

  1. ssh -f -N -R 8888:your_domain:80 username@remote_host

이제 원격 호스트에서 웹 브라우저를 127.0.0.1:8888로 열면 포트 80your_domain에 있는 모든 콘텐츠를 볼 수 있습니다. >.

구문에 대한 보다 일반적인 가이드는 다음과 같습니다.

  1. ssh -R remote_port:site_or_IP_to_access:site_port username@host

연결이 백그라운드에 있으므로 연결을 끊으려면 PID를 찾아야 합니다. 전달한 포트를 검색하면 됩니다.

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -R 8888:your_domain:80 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

그런 다음 SSH 명령과 일치하는 줄의 두 번째 열에 있는 번호인 PID를 대상으로 프로세스를 종료할 수 있습니다.

  1. kill 5965

다른 옵션은 -f 플래그 없이 연결을 시작하는 것입니다. 이렇게 하면 포그라운드에서 연결이 유지되어 전달되는 동안 터미널 창을 사용할 수 없습니다. 이것의 이점은 CTRL-C를 입력하여 터널을 쉽게 종료할 수 있다는 것입니다.

원격 서버에 대한 동적 터널링 구성

SSH 연결을 사용하여 로컬 호스트의 포트에서 원격 호스트의 포트로 트래픽을 터널링할 수 있습니다.

동적 터널은 로컬 컴퓨터가 원격 호스트를 통해 다른 리소스에 연결할 수 있다는 점에서 로컬 터널과 유사합니다. 동적 터널은 단순히 단일 로컬 포트를 지정하여 이를 수행합니다. 터널링을 위해 이 포트를 이용하려는 애플리케이션은 패킷이 터널의 다른 쪽에서 올바르게 리디렉션될 수 있도록 SOCKS 프로토콜을 사용하여 통신할 수 있어야 합니다.

이 로컬 포트로 전달되는 트래픽은 원격 호스트로 전송됩니다. 거기에서 SOCKS 프로토콜은 원하는 끝 위치에 대한 연결을 설정하도록 해석됩니다. 이 설정을 통해 SOCKS 가능 응용 프로그램은 여러 정적 터널 없이 원격 서버를 통해 여러 위치에 연결할 수 있습니다.

연결을 설정하려면 터널에 액세스하려는 로컬 포트와 함께 -D 플래그를 전달합니다. 또한 -f 플래그를 사용하여 SSH를 실행하기 전에 백그라운드로 들어가게 하고 -N 플래그를 사용하여 쉘을 열거나 프로그램을 실행하지 않습니다. 먼 쪽.

예를 들어 포트 7777에서 터널을 설정하려면 다음을 입력할 수 있습니다.

  1. ssh -f -N -D 7777 username@remote_host

여기에서 SOCKS 인식 애플리케이션(예: 웹 브라우저)을 선택한 포트로 지정하기 시작할 수 있습니다. 응용 프로그램은 해당 정보를 포트와 연결된 소켓으로 보냅니다.

트래픽을 SOCKS 포트로 보내는 방법은 애플리케이션에 따라 다릅니다. 예를 들어 Firefox에서 일반적인 위치는 기본 설정 > 고급 > 설정 > 수동 프록시 구성입니다. Chrome에서는 --proxy-server= 플래그를 설정하여 애플리케이션을 시작할 수 있습니다. 전달한 localhost 인터페이스와 포트를 사용하고 싶을 것입니다.

연결이 백그라운드에 있으므로 연결을 끊으려면 PID를 찾아야 합니다. 전달한 포트를 검색하면 됩니다.

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -D 7777 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

그런 다음 SSH 명령과 일치하는 줄의 두 번째 열에 있는 번호인 PID를 대상으로 프로세스를 종료할 수 있습니다.

  1. kill 5965

다른 옵션은 -f 플래그 없이 연결을 시작하는 것입니다. 이렇게 하면 포그라운드에서 연결이 유지되어 전달되는 동안 터미널 창을 사용할 수 없습니다. 이것의 이점은 CTRL-C를 입력하여 터널을 쉽게 종료할 수 있다는 것입니다.

SSH 이스케이프 코드를 사용하여 연결 제어

SSH 세션을 설정한 후에도 터미널 내에서 연결을 제어할 수 있습니다. 세션 내에서 로컬 SSH 소프트웨어와 상호 작용할 수 있는 SSH 이스케이프 코드를 사용하여 이를 수행할 수 있습니다.

클라이언트 측에서 강제로 연결 끊기(멈춤 또는 중지된 세션을 종료하는 방법)

대부분 눈에 띄지 않는 OpenSSH의 가장 유용한 기능 중 하나는 내부에서 세션의 특정 측면을 제어하는 기능입니다.

이러한 명령은 SSH 세션 내에서 ~ 제어 문자로 시작하여 실행할 수 있습니다. 제어 명령은 개행 문자 다음에 처음으로 입력되는 경우에만 해석되므로 사용하기 전에 항상 ENTER 키를 한두 번 누르십시오.

가장 유용한 컨트롤 중 하나는 클라이언트와의 연결 해제를 시작하는 기능입니다. SSH 연결은 일반적으로 서버에 의해 닫히지만 서버에 문제가 있거나 연결이 끊어진 경우 문제가 될 수 있습니다. 클라이언트 쪽 연결 해제를 사용하면 클라이언트에서 연결을 완전히 닫을 수 있습니다.

클라이언트에서 연결을 끊으려면 점과 함께 제어 문자(~)를 사용하십시오. 연결에 문제가 있는 경우 터미널 세션이 중단된 것처럼 보일 수 있습니다. 클라이언트 측 연결 해제를 수행하려면 피드백이 부족하더라도 다음 명령을 입력하십시오.

  1. [ENTER]
  2. ~.

연결이 즉시 닫히고 로컬 셸 세션으로 돌아갑니다.

백그라운드에 SSH 세션 배치

대부분 눈에 띄지 않는 OpenSSH의 가장 유용한 기능 중 하나는 연결 내에서 세션의 특정 측면을 제어하는 기능입니다.

이러한 명령은 SSH 연결 내에서 ~ 제어 문자로 시작하여 실행할 수 있습니다. 제어 명령은 개행 문자 다음에 처음 입력되는 경우에만 해석되므로 사용하기 전에 항상 ENTER를 한두 번 누르십시오.

이것이 제공하는 한 가지 기능은 SSH 세션을 백그라운드에 배치하는 것입니다. 이렇게 하려면 제어 문자(~)를 제공한 다음 작업을 백그라운드로 전환하는 일반적인 키보드 단축키(CTRL-z)를 실행해야 합니다.

  1. [ENTER]
  2. ~[CTRL-z]

이렇게 하면 연결이 백그라운드로 전환되어 로컬 셸 세션으로 돌아갑니다. SSH 세션으로 돌아가려면 기존 작업 제어 메커니즘을 사용할 수 있습니다.

다음을 입력하여 가장 최근의 백그라운드 작업을 즉시 다시 활성화할 수 있습니다.

  1. fg

백그라운드 작업이 여러 개인 경우 다음을 입력하여 사용 가능한 작업을 볼 수 있습니다.

  1. jobs
Output
[1]+ Stopped ssh username@some_host [2] Stopped ssh username@another_host

그런 다음 백분율 기호가 있는 첫 번째 열의 인덱스를 사용하여 모든 작업을 전경으로 가져올 수 있습니다.

  1. fg %2

기존 SSH 연결에서 포트 전달 옵션 변경

대부분 눈에 띄지 않는 OpenSSH의 가장 유용한 기능 중 하나는 연결 내에서 세션의 특정 측면을 제어하는 기능입니다.

이러한 명령은 SSH 연결 내에서 ~ 제어 문자로 시작하여 실행할 수 있습니다. 제어 명령은 개행 문자 다음에 처음으로 입력되는 경우에만 해석되므로 사용하기 전에 항상 ENTER 키를 한두 번 누르십시오.

이것이 허용하는 한 가지는 연결이 이미 설정된 후에 사용자가 포트 포워딩 구성을 변경할 수 있다는 것입니다. 이를 통해 즉시 포트 전달 규칙을 생성하거나 해제할 수 있습니다.

이러한 기능은 제어 문자(~) 및 "C”를 사용하여 세션 중에 액세스할 수 있는 SSH 명령줄 인터페이스의 일부입니다.

  1. [ENTER]
  2. ~C
ssh>

매우 제한된 유효한 명령 세트가 있는 SSH 명령 프롬프트가 제공됩니다. 사용 가능한 옵션을 보려면 이 프롬프트에서 -h를 입력하면 됩니다. 아무 것도 반환되지 않으면 ~v를 몇 번 사용하여 SSH 출력의 세부 정보를 늘려야 할 수 있습니다.

  1. [ENTER]
  2. ~v
  3. ~v
  4. ~v
  5. ~C
  6. -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward

보시다시피 적절한 옵션을 사용하여 전달 옵션을 쉽게 구현할 수 있습니다(자세한 내용은 전달 섹션 참조). 전달 유형 문자 앞에 "K\가 지정된 관련 "kill\ 명령을 사용하여 터널을 파괴할 수도 있습니다. 예를 들어 로컬 전달(-L)을 종료하려면 -KL 명령을 사용할 수 있습니다. 이에 대한 포트만 제공하면 됩니다.

따라서 로컬 포트 전달을 설정하려면 다음을 입력할 수 있습니다.

  1. [ENTER]
  2. ~C
  3. -L 8888:127.0.0.1:80

이제 로컬 컴퓨터의 포트 8888이 연결하려는 호스트의 웹 서버와 통신할 수 있습니다. 작업이 끝나면 다음을 입력하여 앞으로 찢을 수 있습니다.

  1. [ENTER]
  2. ~C
  3. -KL 8888

결론

위의 지침은 대부분의 사용자가 일상적으로 SSH에 대해 필요로 하는 대부분의 정보를 다루어야 합니다. 다른 팁이 있거나 좋아하는 구성 및 방법을 공유하려면 아래 의견을 자유롭게 사용하십시오.