원격 서버(A)에서 작업하는 동안 로컬 SSH 키를 사용하여 내가 제어할 수 없는 다른 서버(B)의 저장소에 액세스하고 싶습니다.
일반적으로 이것은 매력처럼 작동합니다.
원격 서버(A)에 myUsername으로 로그인했으며 B의 저장소에 정상적으로 액세스할 수 있습니다.
문제는 다른 사용자가 (A)에서 수행해야 하는 일부 작업(작성기 업데이트)이 있다는 것입니다.
사용자는 관리자가 아니며 스크립트가 실행되는 폴더는 자신의 것이며 전체 그룹이 아닌 해당 사용자만 쓸 수 있으므로 모든 폴더를 777, 775 등으로 chmod할 수는 없습니다.
문제는 스크립트를 실행하려고 할 때
sudo -u another_user composer update
사용자에게 전달되지 않기 때문에 키를 찾을 수 없다는 것입니다.
게다가 "another_user"의 쉘이 bin/false로 설정되어 있어 상황이 더욱 복잡해졌습니다!
이에 대한 해결 방법이 있나요?
요약하자면: 로컬 SSH 키를 사용하여 내 원격 서버를 통해 다른 원격 서버에 액세스하고 싶습니다.sudo -u another_user ...
더 많은 경험을 가진 누군가가 나를 깨달을 수 있다면 좋을 것입니다!
편집하다: 나도 시도해봤어:http://mybrainhurts.com/blog/2012/05/git-sudo-local-ssh-keys.html하지만 다른 사용자는 쉘이 없기 때문에 작동하지 않을 것 같아요 :(
답변1
이를 수행하는 유일한 방법은 매우 더러운 해킹을 이용하는 것입니다. 나는 그것을 권장하지 않습니다.
setfacl -R -m u:another_user:rwx "${SSH_AUTH_SOCK%/*}"
sudo -u another_user SSH_AUTH_SOCK="$SSH_AUTH_SOCK" composer update
그 이유는 SSH 키가 명명된 소켓을 통해 액세스되기 때문입니다. 명명된 소켓은 귀하가 소유한 디렉터리에 있으며 다른 사람이 액세스할 수 없습니다. 다른 사용자에게 액세스 권한을 부여하는 유일한 방법은 소켓에 대한 권한을 변경하는 것입니다.
위의 방법은 파일 시스템 속성을 확장하여 이를 달성합니다. /tmp
이를 수행하는 유일한 방법은 파일 시스템이 ACL을 지원하지 않는 경우 이며 chmod o+rwx
이는 매우 안전하지 않습니다.
더 나은 해결책은 자신의 사용자로서 명령을 실행하는 데 방해가 되는 문제를 해결하는 것입니다.
답변2
su username
sudo를 사용하여 해당 사용자로 실행되는 (수퍼유저)를 사용할 수 있습니다 . 이것은 약간 도움이 됩니다: (unixstackexchange에 다른 것이 있는지 확실하지 않음)
https://askubuntu.com/questions/376199/sudo-su-vs-sudo-i-vs-sudo-bin-bash-when-does-it-matter-which-is-used
답변3
이전 것, 한번 시도해 보세요 ssh other_user@localhost
. 이론적으로는 ssh-agent 연결이 다시 전달되어 other_user가 이를 사용할 수 있도록 해야 합니다. 그러나 이것은 /bin/false
other_user의 쉘에서는 여전히 작동하지 않습니다.
루트 권한 없이 제한된 셸을 우회할 수 있는 방법은 없다고 생각합니다(있어도 안 됩니다).
에서 man su
:
대상 사용자가 제한된 쉘을 가지고 있는 경우(즉, /etc/passwd에 있는 사용자 항목의 쉘 필드가 /etc/shells에 나열되지 않음), --shell 옵션 또는 $SHELL 환경 변수는 다음을 제외하고는 고려되지 않습니다. 계정 su는 루트에 의해 호출됩니다.