평가 없이 ssh-agent를 시작하는 방법

평가 없이 ssh-agent를 시작하는 방법

내가 이미 알고 있는 것

  • 먼저 ssh-agent명령을 사용해야합니다eval $(ssh-agent)
  • 보안상의 이유로 이 작업을 수행해야 합니다. 하위 프로세스는 위 프로세스의 환경 변수를 변경할 수 없습니다.
  • 시작하면 ssh-agent현재 셸로 수동으로 내보낼 수 있는 2개의 변수가 제공됩니다.

난 모르겠고 네 도움이 필요해

  • 현재 열려 있는 모든 터미널에 환경 변수를 전달할 수 있나요?
  • 하나의 셸 대신 전체 컴퓨터에 환경 변수를 전달할 수 있나요?
  • ssh-agenteval수동으로 시작하는 방법이 있나요 export?


당신의 도움을 주셔서 감사합니다:)

답변1

가끔 출력을 파일로 리디렉션합니다.

ssh-agent > ~/.ssh-agent

그런 다음 다음을 수행하여 동일한 창이나 다른 창에서 해당 환경을 선택할 수 있습니다.

. ~/.ssh-agent

답변2

  • 현재 열려 있는 모든 터미널에 환경 변수를 전달할 수 있나요?

변수는 파일에 기록되어야 하며 각 터미널에서 수동으로 얻어야 ​​합니다.

  • 하나의 셸 대신 전체 컴퓨터에 환경 변수를 전달할 수 있나요?

쉬운 일이 아닙니다. 일단 시작된 대부분의 프로세스는 외부에서 환경 변수에 대한 변경 사항을 전혀 허용하지 않으며 단순히 상위 프로세스에서 상속된 환경을 그대로 사용합니다. 셸은 소스 스크립트에서 환경 설정을 "풀"할 수 있지만 프로세스 외부에서 새 환경 변수를 소스 스크립트로 "푸시"할 수는 없습니다. (터미널 창과 그 안의 셸은 두 개의 별도 프로세스이며,쉘 프로세스의 환경당신이 평소에 관심을 갖고 있는 것. )

반면, 보안상의 이유로 사용자 로그인을 처리하는 프로세스는 새 세션에 전달된 환경을 일부 기본 제공 또는 시스템 관리자가 제어하는 ​​"안전한" 환경 변수 목록으로 사전에 정리하는 경향이 있습니다.

시스템의 모든 사람이 특정 위치에 인증된 SSH 연결을 만들 수 있도록 하려면 루트로 비밀번호 없는 SSH 키 쌍을 생성하고 /etc/skel/.ssh/해당 키 유형 디렉터리에 대한 기본 키 이름을 사용하여 입력하면 됩니다. 이제 생성하는 모든 사용자 그 시점부터 자동으로 해당 키의 복사본을 얻습니다. 기본 이름을 사용했기 때문에 SSH 클라이언트는 해당 시점부터 생성하는 모든 사용자에 대해 자동으로 해당 키의 복사본을 얻습니다. 나가는 연결.

나는 이것이 모든 사람에게 단일 공유 SSH 에이전트에 대한 액세스 권한을 부여하는 것보다 훨씬 덜 안전하다고 생각하지 않습니다. 실제로 이 접근 방식을 사용하면 한 사용자가 공유 SSH 에이전트에 "저장된 모든 키 마운트 해제" 명령을 전송하여 다른 사용자의 작업을 방해할 수 없습니다.

(이건 가능성이 있는 것 같다.XY 문제. 단일 SSH 에이전트를 시스템 전체에서 공유하여 정확히 무엇을 달성하려고 합니까? SSH 에이전트를 공유하여 해결하려는 실제 문제의 요구 사항만 설명하면 더 나은 솔루션이 있을 수 있습니다. )

  • 평가하거나 수동으로 내보내지 않고 ssh-agent를 시작할 수 있는 방법이 있습니까?

시스템에 대한 루트 액세스 권한이 있는 경우 pam_ssh.so시스템의 PAM 구성에 PAM 모듈을 추가할 수 있습니다. 이 모듈에는 두 가지 기능이 있습니다.

  • 인증 모듈로 사용하면 ~/.ssh/login-keys.d/사용자가 ...에 있는 SSH 키의 비밀번호를 알고 있는지 확인하여 사용자의 신원을 인증할 수 있지만 관심 있는 부분은 아닙니다.
  • 세션 관리 모듈로 사용되는 경우 SSH 에이전트를 시작하고 해당 사용자에게 속한 SSH 키(비밀번호가 없거나 사용된 로그인 비밀번호와 동일한 비밀번호)를 사용하여 자동으로 로드하고 적절한 환경 변수를 다가오는 세션에 삽입합니다. 환경.

최소한 Debian 및 관련 배포판은 pam_ssh.soPAM 모듈을 libpam-ssh.

답변3

  • 열려 있는 모든 터미널에 환경 변수를 전달하려면 셸의 시작 스크립트(예: bash의 ~/.bashrc)에 내보내기 명령을 추가하면 됩니다.
  • 환경 변수를 전체 컴퓨터에 전달할 수는 없습니다. 각 셸 세션은 자체 프로세스에서 실행되며 자체 환경 변수를 갖습니다.
  • eval을 사용하거나 환경 변수를 수동으로 내보내지 않으면 ssh-agent를 시작할 수 없습니다. ssh-agent가 제대로 작동하려면 셸 환경을 수정해야 하므로 보안상의 이유로 이러한 단계가 필요합니다.

답변4

이것이 해결책이 될 수 있습니까? :

if [ -S "$SSH_AUTH_SOCK" ] && [ ! -h "$SSH_AUTH_SOCK" ] ; then
    ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
    export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
fi

나는 GNU 화면을 통한 프록시 전달을 위해 ~/.ssh/rc에서 이것을 사용하고 있습니다.

그런 다음 필요한 모든 세션에 대해 export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock해당 세션에 참석합니다.

관련 정보