리눅스 / 유닉스 명령 : sshd

이름

sshd - OpenSSH SSH 데몬

개요

sshd [ -diqtD46 ] [ -b 비트 ] [ -f config_file ] [ -g login_grace_time ] [ -h host_key_file ] [ -k key_gen_time ] [ -o 옵션 ] [ -p 포트 ] [- u len ]

기술

sshd (SSH Daemon)는 ssh (1)의 데몬 프로그램 입니다. 이 프로그램들은 함께 rlogin을 대체합니다. 안전하지 않은 네트워크를 통해 두 개의 신뢰할 수없는 호스트간에 보안 암호화 통신을 제공합니다. 이 프로그램은 가능한 한 쉽게 설치하고 사용할 수 있도록 고안되었습니다.

sshd 는 클라이언트의 연결을 수신하는 데몬입니다. 일반적으로 / etc / rc에서 부팅 할 때 시작됩니다. 들어오는 연결마다 새 데몬을 작성합니다. 분기 된 디먼은 키 교환, 암호화, 인증, 명령 실행 및 데이터 교환을 처리합니다. 이 sshd 구현은 SSH 프로토콜 버전 1과 2를 동시에 지원합니다.

SSH 프로토콜 버전 1

각 호스트에는 호스트를 식별하는 데 사용되는 호스트 별 RSA 키 (일반적으로 1024 비트)가 있습니다. 또한 데몬이 시작되면 서버 RSA 키 (일반적으로 768 비트)가 생성됩니다. 이 키는 일반적으로 매 시간마다 재생성되며 디스크에 저장되지 않습니다.

클라이언트가 연결할 때마다 데몬은 공개 호스트와 서버 키로 응답합니다. 클라이언트는 RSA 호스트 키와 자체 데이터베이스를 비교하여 변경되지 않았는지 확인합니다. 그런 다음 클라이언트는 256 비트 난수를 생성합니다. 호스트 키와 서버 키를 사용하여이 난수를 암호화하고 암호화 된 번호를 서버로 전송합니다. 그런 다음 양측은이 난수를 세션의 모든 통신을 암호화하는 데 사용되는 세션 키로 사용합니다. 나머지 세션은 3DES가 ​​기본적으로 사용되는 기존 암호 인 Blowfish 또는 3DES를 사용하여 암호화됩니다. 클라이언트는 서버에서 제공하는 암호화 알고리즘 을 사용하도록 선택합니다.

그런 다음 서버와 클라이언트가 인증 대화 상자에 들어갑니다. 클라이언트는 .rhosts 인증, RSA 호스트 인증, RSA 챌린지 - 응답 인증 또는 암호 기반 인증 과 결합 된 .rhosts 인증을 사용하여 자체 인증을 시도 합니다 .

Rhosts 인증은 근본적으로 안전하지 않기 때문에 일반적으로 사용할 수 없지만 원하는 경우 서버 구성 파일에서 활성화 할 수 있습니다. rshd rlogind 및 rexecd가 비활성화되어 있지 않으면 시스템 보안이 향상되지 않습니다 (따라서 rlogin 및 rsh가 시스템으로 완전히 비활성화됩니다).

SSH 프로토콜 버전 2

버전 2는 유사하게 작동합니다. 각 호스트는 호스트를 식별하는 데 사용되는 호스트 별 키 (RSA 또는 DSA)를 가지고 있습니다. 그러나 데몬이 시작되면 서버 키가 생성되지 않습니다. 전달 보안은 Diffie-Hellman 키 협약을 통해 제공됩니다. 이 키 합의로 인해 세션 키가 공유됩니다.

나머지 세션은 대칭 암호 (현재 128 비트 AES, Blowfish, 3DES, CAST128, Arcfour, 192 비트 AES 또는 256 비트 AES)를 사용하여 암호화됩니다. 클라이언트는 서버에서 제공하는 암호화 알고리즘을 사용하도록 선택합니다. 또한 세션 무결성은 암호화 메시지 인증 코드 (hmac-sha1 또는 hmac-md5)를 통해 제공됩니다.

프로토콜 버전 2는 공개 키 기반 사용자 (PubkeyAuthentication) 또는 클라이언트 호스트 (HostbasedAuthentication) 인증 방법, 일반 암호 인증 및 시도 응답 기반 방법을 제공합니다.

명령 실행 및 데이터 전달

클라이언트가 성공적으로 인증되면 세션을 준비하기위한 대화 상자가 입력됩니다. 이때 클라이언트는 pseudo-tty 할당, X11 연결 전달, TCP / IP 연결 전달 또는 보안 채널을 통한 인증 에이전트 연결 전달과 같은 작업을 요청할 수 있습니다.

마지막으로, 클라이언트는 쉘 또는 명령 실행을 요청합니다. 그런 다음 측면이 세션 모드로 들어갑니다. 이 모드에서 어느 한 쪽에서 언제든지 데이터를 보낼 수 있으며 이러한 데이터는 서버 측의 쉘 또는 명령과 클라이언트 측의 사용자 터미널로 전달됩니다.

사용자 프로그램이 종료되고 모든 전달 된 X11 및 기타 연결이 닫히면 서버는 명령 종료 상태를 클라이언트에 보내고 양면이 종료됩니다.

sshd 는 명령 행 옵션이나 설정 파일을 사용하여 설정할 수 있습니다. 명령 줄 옵션은 구성 파일에 지정된 값보다 우선합니다.

sshd 는 hangup 시그널을 받으면 설정 파일을 다시 읽는다. SIGHUP 은 시작된 이름, 즉 / usr / sbin / sshd로 자신을 실행함으로써 SIGHUP 신호를 읽는다.

옵션은 다음과 같습니다.

-b 비트

임시 프로토콜 버전 1 서버 키의 비트 수를 지정합니다 (기본값 768).

-디

디버그 모드. 서버는 상세 디버그 출력을 시스템 로그에 보내고 백그라운드에 자신을 넣지 않습니다. 서버도 작동하지 않고 하나의 연결 만 처리합니다. 이 옵션은 서버 디버깅 전용입니다. 다중 -d 옵션은 디버깅 수준을 높입니다. 최대 값은 3입니다.

-이자형

이 옵션을 지정하면 sshd 는 출력을 시스템 로그 대신 표준 오류로 보냅니다.

-f configuration_file

구성 파일의 이름을 지정합니다. 기본값은 / etc / ssh / sshd_config입니다. 구성 파일이 없으면 sshd 는 시작을 거부합니다.

-g login_grace_time

클라이언트가 자신을 인증 할 수있는 유예 시간을줍니다 (기본값 120 초). 클라이언트가이 초 내에 사용자를 인증하지 못하면 서버가 연결을 끊고 종료합니다. 값 0은 제한 없음을 나타냅니다.

-h host_key_file

호스트 키를 읽을 파일을 지정합니다. sshd 가 루트로 실행되지 않는 경우이 옵션을 지정해야합니다 (정상적인 호스트 키 파일은 일반적으로 루트가 아닌 다른 사람이 읽을 수 없으므로). 기본값은 프로토콜 버전 1의 경우 / etc / ssh / ssh_host_key이고 프로토콜 버전 2의 경우 / etc / ssh / ssh_host_rsa_key 및 / etc / ssh / ssh_host_dsa_key입니다. 다른 프로토콜 버전 및 호스트 키에 대해 여러 개의 호스트 키 파일을 가질 수 있습니다 알고리즘.

-나는

sshd 가 inetd에서 실행되도록 지정합니다. sshd 는 클라이언트에 응답하기 전에 서버 키를 생성해야하기 때문에 일반적으로 inetd에서 실행되지 않으며 수십 초가 걸릴 수 있습니다. 매번 키가 다시 생성되면 클라이언트는 너무 오래 기다려야합니다. 그러나 inetd에서 sshd 를 사용하는 작은 키 크기 (예 : 512)를 사용하는 것이 가능할 수 있습니다.

-k key_gen_time

임시 프로토콜 버전 1 서버 키가 재생성되는 빈도 (기본값 3600 초 또는 1 시간)를 지정합니다. 키 재생성의 동기는 키가 아무 데나 저장되지 않고 약 1 시간이 지나면 컴퓨터가 금이 갔거나 물리적으로 점유 된 경우에도 도청 된 통신을 해독하기위한 키를 복구 할 수 없게됩니다. 0 값은 키가 다시 생성되지 않음을 나타냅니다.

-o 옵션

구성 파일에 사용 된 형식으로 옵션을 제공하는 데 사용할 수 있습니다. 이것은 별도의 명령 행 플래그가없는 옵션을 지정할 때 유용합니다.

-p 포트

서버가 연결을 수신하는 포트를 지정합니다 (기본값 : 22). 다중 포트 옵션이 허용됩니다. 명령 행 포트가 지정되면 구성 파일에 지정된 포트는 무시됩니다.

-큐

자동 모드. 아무것도 시스템 로그로 보내지 않습니다. 일반적으로 각 연결의 시작, 인증 및 종료가 기록됩니다.

-티

시험 모드. 구성 파일의 유효성과 키의 온 전성만을 점검하십시오. 이는 구성 옵션이 변경 될 수 있으므로 sshd를 안정적으로 업데이트하는 데 유용합니다.

-u len

이 옵션은 원격 호스트 이름을 저장하는 utmp 구조의 필드 크기를 지정하는 데 사용됩니다. 확인 된 호스트 이름이 len 보다 길면 점 분리 10 진수 값이 대신 사용됩니다. 이렇게하면이 필드를 오버 플로우하는 아주 긴 호스트 이름을 가진 호스트가 여전히 고유하게 식별됩니다. -u0을 지정하면 점으로 구분 된 10 진수 주소 만 utmp 파일에 저장됩니다. - u0 은 또한 인증 메커니즘이나 설정에서 요구하지 않는 한 sshdDNS 요청을 하지 못하게하기 위해 사용됩니다. DNS가 필요할 수있는 인증 메커니즘에는 RhostsAuthentication RhostsRSAAuthentication HostbasedAuthentication 과 키 파일에서 from = pattern-list 옵션 사용이 포함됩니다. DNS가 필요한 구성 옵션에는 AllowUsers 또는 DenyUsers 에서 USER @ HOST 패턴을 사용하는 것이 포함됩니다

-디

이 옵션을 지정하면 sshd 는 분리되지 않고 데몬이되지 않습니다. 이렇게하면 sshd를 쉽게 모니터링 할 수 있습니다.

-4

sshd 가 IPv4 주소만을 사용하도록합니다.

-6

sshd 가 IPv6 주소만을 사용하도록합니다.

구성 파일

sshd 는 / etc / ssh / sshd_config (또는 명령 행에서 -f로 지정된 파일)에서 구성 데이터를 읽습니다. 파일 형식 및 구성 옵션은 sshd_config5에 설명되어 있습니다.

로그인 프로세스

사용자가 성공적으로 로그인하면 sshd 는 다음을 수행합니다.

  1. 로그인이 tty에 있고 명령이 지정되지 않은 경우 마지막 로그인 시간과 / etc / motd를 인쇄합니다 (구성 파일이나 $ HOME / .hushlogin에서 Sx 파일 섹션 참조).
  2. 로그인이 tty에 있으면 로그인 시간을 기록합니다.
  3. / etc / nologin이 있는지 점검하고, 내용을 인쇄하고 종료합니다 (루트가 아닌 경우).
  4. 일반 사용자 권한으로 실행되도록 변경합니다.
  5. 기본 환경을 설정합니다.
  6. $ HOME / .ssh / environment가 존재하고 사용자가 환경을 변경할 수있는 경우이를 읽습니다. sshd_config5의 PermitUserEnvironment 옵션을 참조하십시오.
  7. 사용자의 홈 디렉토리를 변경합니다.
  8. $ HOME / .ssh / rc가 있으면 실행합니다. 그렇지 않으면 / etc / ssh / sshrc가 존재하면 실행합니다. 그렇지 않으면 xauth를 실행합니다. ``rc ''파일에는 X11 인증 프로토콜과 쿠키가 표준 입력으로 제공됩니다.
  9. 사용자의 쉘 ​​또는 명령을 실행합니다.

Authorized_Keys 파일 형식

$ HOME / .ssh / authorized_keys는 프로토콜 버전 1의 RSA 인증 및 프로토콜 버전 2의 공개 키 인증 (PubkeyAuthentication)에 대해 허용 된 공개 키를 나열하는 기본 파일입니다. AuthorizedKeysFile 을 사용하여 대체 파일을 지정할 수 있습니다.

파일의 각 행에는 하나의 키가 들어 있습니다 (공백 행과`# '으로 시작하는 행은 주석으로 무시됩니다). 각 RSA 공개 키는 옵션, 비트, 지수, 모듈러스, 주석과 같이 공백으로 구분 된 다음 필드로 구성됩니다. 각 프로토콜 버전 2 공개 키로 구성됩니다 : 옵션, keytype, base64 인코딩 된 키, 주석. 옵션 필드는 선택 사항입니다. 그 존재 여부는 라인이 숫자로 시작하는지 아닌지에 따라 결정됩니다 (옵션 필드는 숫자로 시작하지 않습니다). 비트, 지수, 모듈 및 설명 필드는 프로토콜 버전 1에 대한 RSA 키를 제공합니다. 주석 필드는 아무 것도 사용되지 않습니다 (그러나 사용자가 키를 식별하는 데 편리 할 수 ​​있습니다). 프로토콜 버전 2의 경우 keytype은``ssh-dss ''또는``ssh-rsa ''입니다.

이 파일의 행은 일반적으로 (공개 키 인코딩의 크기 때문에) 수백 바이트 길이입니다. 당신은 그들을 입력하고 싶지 않아요; 대신 identity.pub id_dsa.pub 또는 id_rsa.pub 파일을 복사하여 편집하십시오.

sshd 는 768 비트의 프로토콜 1 및 프로토콜 2 키에 대해 최소 RSA 키 모듈 크기를 적용합니다.

옵션 (있는 경우)은 쉼표로 구분 된 옵션 스펙으로 구성됩니다. 큰 따옴표를 제외하고는 공백을 사용할 수 없습니다. 다음 옵션 사양이 지원됩니다 (옵션 키워드는 대소 문자를 구분하지 않음).

from = 패턴 목록

공개 키 인증 외에도 원격 호스트의 정식 이름이 쉼표로 구분 된 패턴 목록 (`* '및`?'는 와일드 카드로 사용)에 있어야 함을 지정합니다. 이리스트에는`! '접두어가 붙은 패턴이 포함될 수도 있습니다. ; 정식 호스트 이름이 부정 패턴과 일치하면 키는 허용되지 않습니다. 이 옵션의 목적은 선택적으로 보안을 강화하는 것입니다. 공개 키 인증 자체는 네트워크 또는 이름 서버 또는 기타 (그러나 키)를 신뢰하지 않습니다. 그러나 누군가가 어떻게 든 열쇠를 훔친다면, 열쇠는 침입자가 세계 어디에서나 로그인 할 수있게합니다. 이 추가 옵션을 사용하면 도난당한 키를 사용하는 것이 더욱 어려워집니다 (이름 서버 및 / 또는 라우터가 키에 추가로 손상되어야합니다).

명령 = 명령

이 키가 인증에 사용될 때마다 명령이 실행되도록 지정합니다. 사용자가 제공 한 명령 (있는 경우)은 무시됩니다. 클라이언트가 pty를 요청하면 명령이 pty에서 실행됩니다. 그렇지 않으면 tty없이 실행됩니다. 8 비트 클린 채널이 필요한 경우, pty를 요청하거나 no-pty를 지정해서는 안됩니다. 명령에 백 슬래시로 인용하여 따옴표를 포함시킬 수 있습니다. 이 옵션은 특정 공개 키가 특정 작업을 수행하도록 제한하는 데 유용 할 수 있습니다. 원격 백업을 허용하지만 다른 것은 허용하지 않는 키를 예로들 수 있습니다. 명시 적으로 금지되지 않는 한 클라이언트는 TCP / IP 및 / 또는 X11 전달을 지정할 수 있습니다. 이 옵션은 쉘, 명령 또는 서브 시스템 실행에 적용됩니다.

환경 = 이름 = 값

이 키를 사용하여 로그인 할 때 문자열을 환경에 추가하도록 지정합니다. 이 방법으로 설정된 환경 변수는 다른 기본 환경 값보다 우선합니다. 이 유형의 여러 옵션이 허용됩니다. 환경 처리는 기본적으로 사용되지 않으며 PermitUserEnvironment 옵션을 통해 제어됩니다. UseLogin을 사용하면이 옵션이 자동으로 비활성화됩니다.

무 포트 포워딩

이 키가 인증에 사용될 때 TCP / IP 전달을 금지합니다. 클라이언트가 포트 포워드 요청을하면 오류가 반환됩니다. 이것은 예를 들어 명령 옵션과 관련하여 사용될 수 있습니다.

no-X11-forwarding

이 키가 인증에 사용될 때 X11 전달을 금지합니다. 클라이언트의 모든 X11 전달 요청은 오류를 반환합니다.

노 에이전트 포워딩

이 키가 인증에 사용될 때 인증 에이전트 전달을 금지합니다.

아니오 -pty

tty 할당을 방지합니다 (pty를 할당하는 요청이 실패합니다).

permitopen = 호스트 : 포트

로컬의 ``ssh -L '' 포트 포워딩을 특정 호스트와 포트에만 연결할 수 있도록 제한하십시오. IPv6 주소는 대체 구문으로 지정할 수 있습니다. host / port 여러 개의 permitopen 옵션을 쉼표로 구분하여 적용 할 수 있습니다. 지정된 호스트 이름에서 패턴 일치가 수행되지 않으며 리터럴 도메인 또는 주소 여야합니다.

예제들

1024 33 12121 ... 312314325 ylo@foo.bar

from = "*. niksula.hut.fi,! pc.niksula.hut.fi"1024 35 23 ... 2334 ylo @ niksula

command = "dump / home", no-pty, no-port-forwarding 1024 33 23 ... 2323 backup.hut.fi

permitopen = "10.2.1.55:80", permitopen = "10.2.1.56:25"1024 33 23 ... 2323

Ssh_Known_Hosts 파일 형식

/ etc / ssh / ssh_known_hosts 및 $ HOME / .ssh / known_hosts 파일에는 알려진 모든 호스트에 대한 호스트 공개 키가 들어 있습니다. 전역 파일은 관리자 (선택 사항)가 준비해야하며 사용자 별 파일은 자동으로 유지 관리됩니다. 사용자가 알 수없는 호스트에서 연결할 때마다 해당 키가 사용자 별 파일에 추가됩니다.

이 파일의 각 행에는 호스트 이름, 비트, 지수, 모듈러스, 주석이 있습니다. 필드는 공백으로 구분됩니다.

호스트 이름은 쉼표로 구분 된 패턴 목록입니다 ( '*'및 '?'는 와일드 카드로 사용). 각 패턴은 정규 호스트 이름 (클라이언트 인증시) 또는 사용자 제공 이름 (서버 인증시)과 대조됩니다. 패턴은`! '로 시작될 수도있다. 부정을 나타내는 경우 : 호스트 이름이 부정 패턴과 일치하면 행의 다른 패턴과 일치하더라도 (해당 행에 의해) 허용되지 않습니다.

비트, 지수 및 모듈러스는 RSA 호스트 키에서 직접 가져옵니다. 예를 들어, /etc/ssh/ssh_host_key.pub에서 얻을 수 있습니다. 선택적 주석 필드는 행의 끝까지 계속 사용되고 사용되지 않습니다.

`# '으로 시작하는 라인과 빈 라인은 주석으로 무시됩니다.

호스트 인증을 수행 할 때 일치하는 행에 적절한 키가 있으면 인증이 승인됩니다. 따라서 동일한 이름에 대해 여러 줄 또는 다른 호스트 키를 가질 수는 있지만 (권장하지는 않음) 이것은 필연적으로 다른 도메인의 짧은 호스트 이름이 파일에 들어있을 때 발생합니다. 파일에 충돌 정보가있을 수 있습니다. 두 파일에서 유효한 정보를 찾을 수 있으면 인증이 승인됩니다.

이 파일의 줄은 일반적으로 수백 자 길이로, 호스트 키를 수동으로 입력하고 싶지는 않습니다. 오히려 스크립트로 생성하거나 /etc/ssh/ssh_host_key.pub를 가져 와서 호스트 이름을 앞에 추가하십시오.

예제들

closenet, ..., 130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ..... =

참고 사항

scp (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen "SSH 프로토콜 아키텍처" draft-ietf-secsh-architecture-12.txt 2002 년 1 월 작업 진행중인 자료

M. Friedl N. Provos WA Simpson "SSH 전송 계층 프로토콜을위한 Diffie-Hellman 그룹 교환" draft-ietf-secsh-dh-group-exchange-02.txt

중요 : man 명령 ( % man )을 사용하여 특정 컴퓨터에서 명령이 어떻게 사용되는지보십시오.