답변:
사용자의 .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"과 같은 포트 전달을 지정한 경우에도 포트 전달이 계속 적용됩니다.
어쨌든 시도해보십시오.
no-pty
쉘 액세스를 막지 않고 쉘에 pty를주지 않습니다. 프롬프트가 표시되지 않지만 (예 : "정지 된 것처럼 보임") 여전히 명령을 잘 수행 할 수 있습니다. 쉘 액세스를 제한 하려면 command="..."
옵션 이 필요합니다 .ssh/authorized_keys
.
사용자가 로그인 할 수없는 쉘을 지정하십시오.
예 :
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
쉘 프롬프트를 얻지 못하게하고 60 초의 시간 초과를 제공합니다. 60 초 동안 연결이 없으면 종료되어 완전히 연결이 끊어집니다 (요구 사항에 따라 숫자가 증가합니다).
셸에서 허용하지 않기 때문에 원격 명령도 실행할 수 없습니다.
logout
일반 스크립트에서 " " 와 동일한 효과를 갖습니다 .
/sbin/nologin
의 사용자 친화적 인 메시지로 맞춤 설정할 수있는 이 (가) 이미 있습니다 /etc/nologin.txt
.
내 솔루션은 대화 형 쉘없이 터널링을 할 수있는 사용자에게 / etc / passwd의 해당 쉘 을 / usr / bin / tunnel_shell로 설정하는 것 입니다.
무한 루프로 실행 파일 / usr / bin / tunnel_shell 을 만드십시오 .
또한 AllowGroups
및 Match Group
옵션을 사용하십시오.
여기에 완전히 설명되어 있습니다 : http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
쉘 액세스 권한이 있습니다. 이것은 실제로 문제를 해결하지 못하며 위험합니다.