git
서버가 실행되는 서버가 있습니다 .
Git 사용자가 Linux 사용자 이름과 비밀번호를 사용하여 복제, 푸시 및 풀을 수행할 수 있지만 Linux 콘솔에는 로그인할 수 없기를 바랍니다.
Linux 콘솔을 사용하여 해당 계정을 잠그면 passwd -l
해당 사용자는 더 이상 Linux 콘솔에 로그인할 수 없지만 git
.
/bin/false
기본 셸을 git 으로 변경하면 Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
해당 자격 증명을 사용하여 서버에 로그인하려고 할 때 퍼티가 충돌합니다.
어떤 아이디어가 있나요? 감사해요.
답변1
git-shell
이런 상황에 대한 명령이 있습니다 . 바라보다man git-shell
더 알아보기.
설정 방법은 다음과 같습니다.
chsh -s /usr/bin/git-shell username
git clone을 가정하면 ~username/testrepo/.git/
잘 작동합니다 .
git clone username@host:testrepo
Cloning into 'testrepo'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
위에 ssh username@host
보면 알 수 있습니다.
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
연결이 종료됩니다.
스크립트가 포함된 디렉토리를 생성하는 것은 가능 하지만 스크립트가 항상 실행되고 출력을 생성하며 git 저장소 작업을 중단하기 때문에 ~username/git-shell-commands/
작동하도록 할 수 없습니다 . git clone
따라서 이 디렉터리를 생성하지 않는 것이 가장 좋습니다.
GitLab의 기능을 기반으로 한 또 다른 접근 방식이 있습니다. 한 명의 git
사용자가 모든 저장소를 소유하게 합니다. 여기에는 모든 호스트 키가 포함됩니다 ~git/.ssh/authorized_keys
. 각 줄에는 아래와 같이 옵션이 접두어로 붙습니다.
command="~/bin/gitshell.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB34234234.....
여기서는 이를 사용할 수 없으므로 gitlab-shell
사용자 정의 스크립트를 사용합니다 ~git/bin/gitshell.sh
.
#!/bin/sh
exec git-shell -c "$SSH_ORIGINAL_COMMAND"
chsh
in 명령이 우선 적용되므로 이 방법은 필요하지 않습니다 authorized_keys
.
답변2
나는 sshd_config
사용자의 수준을 다음과 같이 제한해야 한다고 생각합니다.
Match User git # or Group git-group
ForceCommand git-shell
답변3
한번 사용해 /sbin/nologin
보시면 /etc/passwd
사용자가 실행할 수 있습니다.