ssh 터널링 만 액세스


31

터널링에 대해서만 액세스를 허용하도록 Linux에서 ssh를 구성 할 수 있습니까? 즉, 사용자는 터널을 설정할 수 있지만 쉘 / 액세스 파일을 얻을 수 없습니까?

답변:


42

예, /bin/false쉘로만 사용 하고 원격 명령 (예 -N: OpenSSH 의 플래그)을 실행하지 않고 터널링 SSH 프로세스를 시작하도록 사용자에게 지시하십시오 .

ssh -N -L 1234:target-host:5678 ssh-host

음, 사용자가를 사용하지 않으면 -N쉘 액세스 권한이 있습니다. 이것은 실제로 문제를 해결하지 못하며 위험합니다.
mlissner

12
@mlissner : 아니요, /bin/false셸을 사용하는 경우 모든 로그인 세션이 즉시 종료되므로 셸 액세스 권한이 없습니다.
Sven

10

사용자의 .ssh / authorized_keys 파일에 다음과 같이 입력하십시오.

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

따라서 기본적으로 컨트롤은 공백으로 구분 된 사용자의 ssh 공개 키 앞에 있습니다. 이 예에서 특정 공개 키를 사용하는 연결은 192.168.1.10의 MySQL 서버 및 10.0.0.16의 웹 서버로만 SSH 포트 전달을 수행 할 수 있으며 쉘 (no-pty)에는 할당되지 않습니다. "no-pty"옵션에 대해 구체적으로 묻는 것이지만 사용자가 특정 서버로만 터널링해야하는 경우 다른 옵션도 유용 할 수 있습니다.

authorized_keys 파일에 대한 추가 옵션은 sshd에 대한 매뉴얼 페이지를 참조 하십시오 .

사용자의 경험은 조금 이상하게 보일 수 있습니다. ssh에 들어가면 세션이 중단 된 것처럼 보입니다 (pty를 얻지 못하므로). 괜찮아. 사용자가 "-L3306 : 192.168.1.10 : 3306"과 같은 포트 전달을 지정한 경우에도 포트 전달이 계속 적용됩니다.

어쨌든 시도해보십시오.


6
이것은 위험한 조언입니다 . no-pty쉘 액세스를 막지 않고 쉘에 pty를주지 않습니다. 프롬프트가 표시되지 않지만 (예 : "정지 된 것처럼 보임") 여전히 명령을 잘 수행 할 수 있습니다. 쉘 액세스를 제한 하려면 command="..."옵션 이 필요합니다 .ssh/authorized_keys.
Aleksi Torhamo 2016 년

@AleksiTorhamo는 정확하지만 시작입니다. 쉘을 완전히 제한하려면 / etc / passwd에서 쉘을 / usr / sbin / nologin 또는 / bin / false로 설정해야합니다. Aleksi의 조언과 함께 위 항목을 편집하여 반영했습니다.
Jamieson Becker

4

사용자에게 다음과 같이 로그 아웃 만 허용하는 쉘을 제공하십시오. /bin/press_to_exit.sh

#! / bin / bash
-n 1 -p "종료하려면 아무 키나 누르십시오"키를 읽으십시오

이렇게하면 터널이 활성화 된 상태에서 원하는만큼 로그인 상태를 유지할 수 있지만 명령을 실행할 수는 없습니다. Ctrl-c연결을 닫습니다.


3
적어도 이론상으로 사용자는 적절한 순간에 (1 줄과 2 줄 사이) CTRL + C를 칠 수 있고 전체 bash 쉘로 끝날 수 있다고 생각합니다.
andreas-h

2

사용자가 로그인 할 수없는 쉘을 지정하십시오.

예 :

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

쉘 프롬프트를 얻지 못하게하고 60 초의 시간 초과를 제공합니다. 60 초 동안 연결이 없으면 종료되어 완전히 연결이 끊어집니다 (요구 사항에 따라 숫자가 증가합니다).

셸에서 허용하지 않기 때문에 원격 명령도 실행할 수 없습니다.


4
대부분의 리눅스 설치에는 이미 무언가가 있습니다. / sbin / nologin 또는 / bin / false 또는 유사합니다.
Rory

1
위 예제에서 Ctrl-C는 무엇을합니까?
Arjan

Arjan : 스크립트가 쉘로 사용되므로 Ctrl-C는 logout일반 스크립트에서 " " 와 동일한 효과를 갖습니다 .
grawity

2
실제로 "-N"옵션을 사용하여 earl의 응답이 마음에 들지만 사용자에게 유용하고 친근하고 유익한 메시지를 제공하고 SSH 연결을 그만두고 모든 사용자에게 알리고 싶다면 사용자 정의 스크립트가 훌륭하고 명확합니다. 무엇을하고 있는지
jrg

2
@jrg이 토론은 오래되었으며 생각이 바뀔 수 있습니다. :) IMHO 수제 쉘 스크립트를 사용하는 것은 위험합니다. /sbin/nologin의 사용자 친화적 인 메시지로 맞춤 설정할 수있는 이 (가) 이미 있습니다 /etc/nologin.txt.
dr01

0

내 솔루션은 대화 형 쉘없이 터널링을 할 수있는 사용자에게 / etc / passwd의 해당 쉘 을 / usr / bin / tunnel_shell로 설정하는 것 입니다.

무한 루프로 실행 파일 / usr / bin / tunnel_shell만드십시오 .

또한 AllowGroupsMatch Group옵션을 사용하십시오.

여기에 완전히 설명되어 있습니다 : http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
사용자는 어떻게 든 실행 파일을 종료하고 셸을 벗어날 수 있습니다. 실행 파일이이 작업을 수행 할 수 없다고 확신하십니까?
dr01

2
@ dr01 솔직히 말해서 이것이 100 % 안전한지 잘 모르겠습니다. 실행 파일을 종료하면 SSH 세션도 종료됩니다. 나는 이것을 더 연구하고 여기에 다시 언급 할 것입니다.
Daniel W.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.