재부팅하거나 로그아웃한 후 로그인한 후에도 비밀번호 없는 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.agent
SSH를 다시 실행하려면 프록시 소켓을 재설정하세요 . ssh-add는 ssh-agent가 처음 시작된 후에만 필요합니다.
답변3
그리고열쇠고리비밀번호 없이 키 쌍을 사용하면 됩니다. 이는 ssh-agent를 둘러싼 간단한 쉘 스크립트 래퍼이므로 추가 소프트웨어를 설치할 필요가 없습니다.
SSH 에이전트를 실행 중인지 자동으로 감지하여 사용합니다. 특정 상황에서는 키 세트를 자동으로 로드하고 잊어버리도록 구성할 수 있습니다.
다른 시스템에 대한 SSH 액세스가 필요한 cronjob을 처리하는 데 적합합니다. 파일 source
에 올바른 파일 만 있으면 ~/.keychain
cronjob은 설정한 모든 키를 사용할 수 있습니다.
노트: 로그아웃해도 작동하지만, 시스템을 다시 시작하거나 에이전트를 종료하는 경우에는 작동하지 않습니다. 이제 비밀번호를 파일에 저장하지 않는 한 에이전트가 종료될 때 키를 열어두는 방법이 있습니다. 분명히 이는 키를 비밀번호로 보호하는 전체 목적을 무효화할 것입니다.
답변4
ssh-copy-id
를 사용하여 공개 키를 원격 컴퓨터에 복사 할 수 있습니다 . 를 실행할 때 비밀번호를 추가하지 않으면 ssh-keygen
해당 원격 시스템에 ssh를 연결할 때마다 비밀번호를 묻는 메시지가 표시되지 않습니다.
따라서 단계는 다음과 같습니다.
local$ ssh-keygen -t dsa
local$ ssh-copy-id remote
local$ ssh remote