~/.ssh/config
클라이언트 측을 통해 특정 사용자/서버에 대한 바로가기를 만들 수 있다는 것을 알고 있지만 /etc/ssh/ssh_config
서버 측에서도 비슷한 작업을 수행하고 싶습니다.
즉, 클라이언트 측에서 발행할 때:
ssh [email protected]
나는 실제로 다음으로 루트를 옮겼습니다.
/home/jon/pub
name.server.top
sftp를 어디에 사용할 것인지에 관해서 .
제가 본 예시는 /etc/ssh/sshd_config
다음과 같습니다.
Subsystem sftp internal-sftp
Match user pub
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
다음 작업이 계속 진행되나요?
ChrootDirectory /home/jon/pub
pub
가상 사용자를 생성할 수 있나요 ? 즉, 원격 사용자가 로그인 pub
하고 그 사람의 공개키가 들어있기 때문에 별도의 디렉토리 나 디렉토리를 생성할 필요가 전혀 /home/jon/.ssh/authorized_keys
없습니다 ./home/pub/.ssh/authorized_keys
/home/pub
답변1
작동한다면 아마도 다음이 있어야 할 것입니다.
ChrootDirectory /home/jon
- 홈 디렉토리
pub
가/etc/passwd
./pub
/home/jon
의 소유여야 하며 root
에만 쓸 수 있습니다 root
.
또한 (셸의 경우), (공유 라이브러리의 경우), (UID에서 이름으로의 변환을 위한 비밀번호) 등과 /home/jon
같이 필요한 모든 것을 포함하는 작업 루트 디렉토리가 필요합니다 .bin
lib
etc
원하는 ChrootDirectory가 아닐 가능성이 높습니다.
/etc/passwd
/home/jon 아래에 원하는 "별칭" 사용자 이름과 다른 홈 디렉터리를 사용하여 여러 항목을 만들어 볼 수 있습니다. 동일한 숫자 UID와 GID를 사용자에게 할당할 수 있습니다 jon
.
하지만 공개 키 인증이 만족스러운지는 잘 모르겠습니다. 사용해보시고 댓글 남겨주세요.
답변2
저는 이것을 가상 머신 환경에서 테스트했습니다. SSH 서버는 Cygwin(VM 호스트이기도 함)이고 클라이언트는 Arch Linux SSH(VM 게스트이기도 함)였습니다.
다음 스크립트를 사용했습니다.
chroot가 없으므로 공유 폴더에 바이너리를 복사할 필요가 없고 공개 키만 복사하면 됩니다. 어쨌든 (SSH 대신) 내부 SFTP를 사용하면 바이너리 요구 사항이 줄어들 것이라고 생각합니다.
#!/bin/sh
## Setup SFTP access on server side
## using an alias user and to a subdir of the aliased user home
## ------------------------------------------------------------
## Customise
## Shared path inside the aliased user home
sharedpath="/home/jon/pub"
## Aliased user name
altuser="pub"
## Path to the public key of aliased user
pubkey=~/.ssh/pub_rsa.pub
## Add aliased user to /etc/passwd
user=`grep ^$USER /etc/passwd`
txt="$altuser:`echo $user | cut -d: -f2-5`"
txt="$txt:$sharedpath:`echo $user | cut -d: -f7`"
echo $txt>>/etc/passwd
## Set user rules in sshd_config
txt="Match User $altuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
"
echo "$txt" >>/etc/ssh/sshd_config
## Copy the public key in the shared folder
mkdir -p "$sharedpath/.ssh"
cp "$pubkey" "$sharedpath/.ssh/"
## Format sftp line
echo "You can now run on the client (adjust paths accordingly):"
echo "sftp -i ${pubkey%.*} [email protected]"
답변3
AuthorizedKeysCommand
약간 비실용적인 것처럼 보이지만 모든 홈 디렉토리에서 공개 키를 가져오는 옵션을 (남용) 사용할 수도 있습니다 .
ChrootDirectory
chroot에 관해서는 chroot의 대화형 세션에 필요한 많은 사항을 읽어보세요 .