로그인/재시작 시 비밀번호 없는 자동 SSH

로그인/재시작 시 비밀번호 없는 자동 SSH

재부팅하거나 로그아웃한 후 로그인한 후에도 비밀번호 없는 SSH가 지속되기를 원합니다. 어떻게든 ssh-agent를 실행하고 로그인할 때 ssh-add 명령을 사용해야 합니다. 튜토리얼에서 다음 줄을 추가해야 한다는 내용을 읽었습니다 .bashrc.

ssh_agent="$HOME/.ssh-agent.sh"
if [ -f $ssh_agent ]
then
  source $ssh_agent > /dev/null
fi

동시에 튜토리얼에서도 언급됩니다.

ssh-agent가 모든 프로세스(크론 작업 포함)를 실행하는 경우 비밀번호가 필요하지 않습니다. 그러나 ssh-agent가 죽거나 종료되면 이전 설정이 유지되므로 문제가 발생할 수 있습니다.

재부팅/재로그인 후에도 비밀번호 없이 ssh를 사용할 수 있는 안전한 방법을 원합니다. 어떤 제안이 있으십니까?

답변1

가장 쉬운 방법: 설치pam_ssh. 로그인하면 자동으로 ssh-agent가 시작되고 키가 로드됩니다.

어려운 방법: 이것을 로그인 스크립트( ~/.bash_profile또는 ~/.profile)에 넣으세요:

check-ssh-agent() {
    # `ssh-add` returns 2 if the agent is running but empty; ignore.
    ssh-add -l &>/dev/null || (( $? == 2 ))
}

if ! check-ssh-agent; then
    envfile=~/.ssh/agent-$HOSTNAME
    if [ -f "$envfile" ]; then
        . "$envfile" >/dev/null
    fi
    if ! check-ssh-agent; then
        ssh-agent >"$envfile"
        . "$envfile" >/dev/null
        if [ -t 0 ]; then
            # This `if` can be removed if all your keys are passphrase-less.
            ssh-add
        fi
    fi
    unset envfile
fi

"나머지 설정"은 $SSH_AUTH_SOCK쉽게 수정할 수 있는 환경 변수입니다. (게다가 이 모든 것은할 수 있다go error는 ssh의 오류 메시지입니다. )

답변2

고정 프록시 소켓을 사용하세요. 예를 들어:

export SSH_AUTH_SOCK=/tmp/user.agent
ssh-agent -a /tmp/user.agent
ssh-add
ssh -f -N -R 22:localhost:2222 server

ssh-agent소켓 사용을 시작한 /tmp/user.agent다음 ssh-add개인 키를 로드하기 위해 실행됩니다. 그런 다음 ssh원격 포트 전달을 사용하여 서버에 연결하기 시작했습니다 . 서버의 포트 2222에 연결하려는 시도는 클라이언트로 다시 전달되고 클라이언트의 포트 22에 연결됩니다. -N은 셸을 시작하지 않음을 의미하고, -f는 백그라운드에서 포크 및 실행을 의미합니다. 나는 라우터의 포트를 열지 않고도 서버에서 데스크탑에 액세스할 수 있도록 하기 위해 이런 종류의 명령을 사용합니다. 나중에 다시 로그인해도 에이전트는 계속 실행 중입니다. export SSH_AUTH_SOCK=/tmp/user.agentSSH를 다시 ​​실행하려면 프록시 소켓을 재설정하세요 . ssh-add는 ssh-agent가 처음 시작된 후에만 필요합니다.

답변3

그리고열쇠고리비밀번호 없이 키 쌍을 사용하면 됩니다. 이는 ssh-agent를 둘러싼 간단한 쉘 스크립트 래퍼이므로 추가 소프트웨어를 설치할 필요가 없습니다.

SSH 에이전트를 실행 중인지 자동으로 감지하여 사용합니다. 특정 상황에서는 키 세트를 자동으로 로드하고 잊어버리도록 구성할 수 있습니다.

다른 시스템에 대한 SSH 액세스가 필요한 cronjob을 처리하는 데 적합합니다. 파일 source에 올바른 파일 만 있으면 ~/.keychaincronjob은 설정한 모든 키를 사용할 수 있습니다.

노트: 로그아웃해도 작동하지만, 시스템을 다시 시작하거나 에이전트를 종료하는 경우에는 작동하지 않습니다. 이제 비밀번호를 파일에 저장하지 않는 한 에이전트가 종료될 때 키를 열어두는 방법이 있습니다. 분명히 이는 키를 비밀번호로 보호하는 전체 목적을 무효화할 것입니다.

답변4

ssh-copy-id를 사용하여 공개 키를 원격 컴퓨터에 복사 할 수 있습니다 . 를 실행할 때 비밀번호를 추가하지 않으면 ssh-keygen해당 원격 시스템에 ssh를 연결할 때마다 비밀번호를 묻는 메시지가 표시되지 않습니다.

따라서 단계는 다음과 같습니다.

local$ ssh-keygen -t dsa
local$ ssh-copy-id remote
local$ ssh remote

관련 정보