WSL: Windows 10을 재부팅하지 않는 한(예: 미인 대회 행위) SSH 개인 키에 액세스할 수 있도록 유지합니다.

WSL: Windows 10을 재부팅하지 않는 한(예: 미인 대회 행위) SSH 개인 키에 액세스할 수 있도록 유지합니다.

지금까지 Windows 10에서는 주로 PuTTy 번들(PuTTygen, Pageant, PuTTy 등)을 사용하여 SSH를 통해 원격 Linux 시스템에 액세스했습니다.

나는 미인대회를 다음과 같이 사용한다.개인 키 홀더개인 키(및 비밀번호)는 컴퓨터를 다시 시작하지 않는 한 메모리에 유지됩니다.

다음 명령을 사용하는 것처럼 WSL OpenSSH를 클라이언트로 더 자주 사용하고 싶습니다.

ssh USER@IP -vvv -L 22:localhost:22 # Or [email protected];

그러나 WSL OpenSSH에서는 미인대회와 유사한 동작을 발견하지 못했습니다.

어떤 이유로든 컴퓨터 자체가 다시 시작될 때까지 가능한 모든 WSL 셸(셸이 종료되는 경우에도)에 대한 SSH 키를 메모리에 보관합니다.

WSL OpenSSH에서 미인대회와 유사한 동작을 달성하려면 어떻게 해야 하나요?

답변1

ssh-agent, 그리고 가 필요합니다 ssh-add.

ssh-agent로그인하면 이미 시작되었을 수 있습니다(Debian에서는). 테스트하려면 를 실행하세요 ssh-add -l. 에이전트가 작동 중이면 키가 표시되지 않아야 합니다. 실행되고 있지 않으면 브로커에 연결할 수 없습니다.와 같은 오류 메시지가 표시됩니다.

키를 추가합니다. 기본 이름인 경우 를 실행하면 됩니다 ssh-add. 그렇지 않으면 ssh-add «path/to/your/key/key-name»비밀번호를 묻는 메시지가 표시됩니다.

답변2

유*닉스에서ssh-agent이상적으로는 세션 로그인 시 가능한 한 빨리 실행되어야 합니다. 이는 일반적으로 GUI(X11 등) 로그인에서 수행됩니다. 악마화 해제 외에도 이 명령은 편리하게 출력으로도 사용됩니다.쉘 명령쉘 평가를 준비하기 위해 새로 생성된 데몬에 연결하려면 어떤 내보내기 변수가 필요합니까?

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-TO9z33k5zo6t/agent.25671; export SSH_AUTH_SOCK;
SSH_AGENT_PID=25673; export SSH_AGENT_PID;
echo Agent pid 25673;

posix sh 쉘에서 다시 실행:

$ eval $(ssh-agent)
Agent pid 25965
$ printenv SSH_AUTH_SOCK SSH_AGENT_PID
/tmp/ssh-XgTqsra2Pok2/agent.25964
25965

로그인 설정 중에 공통 상위 프로세스에 의해 실행되는 경우 모든 후속 프로세스는 이러한 변수를 상속하므로 ssh-agent세션의 어느 곳에서나 실행이 가능해집니다.

ssh또한 이러한 변수 중 일부는 프록시 전달 옵션( )을 사용하여 원격으로 상속될 수 -A있으며 로컬일 필요는 없습니다 ssh-agent.


이제 동일한 사용자가 재사용을 원 ssh-agent하지만 관련되지 않은 다른 액세스(다른 터미널, 세션, 원격 또는 로컬 등)에서 해당 액세스는 메커니즘이 없기 때문에 이전에 내보낸 두 변수를 상속하지 않습니다. . 이 사용자는 필요한 곳 ​​어디에서나 해당 값을 검색할 수 있습니다. 해당 값을 내보낸 쉘을 실행하는 다른 터미널, 이 특정 목적을 위해 이러한 변수를 저장하도록 설계된 스크립트(또는 위의 명령을 사용하는 것이 더 좋음)에 의해 생성된 고정 위치의 일부 파일 등 .) 다시 내보내십시오.

SSH_AUTH_SOCK=/tmp/ssh-XgTqsra2Pok2/agent.25964; export SSH_AUTH_SOCK;
SSH_AGENT_PID=25965; export SSH_AGENT_PID;

따라서 다음 대신 일부 터미널에서 실행하는 경우 eval $(ssh-agent):

$ mkdir -m 700 -p ~/.ssh-agent-info
$ ssh-agent > ~/.ssh-agent-info/variables
$ . ~/.ssh-agent-info/variables
Agent pid 25965

그런 다음 몇 가지 키를 추가하기 시작합니다.

$ ssh-add /tmp/demokey
Enter passphrase for /tmp/demokey: 
Identity added: /tmp/demokey
$ ssh-add -l
256 SHA256:Ayd3PCiSkVVV09IqwEXz2Fn3nuXF70FDPMlNtZiuTtY user@host (ED25519)

그리고 동일한 변수를 다시 가져오는 동일한 시스템의 다른 터미널 사용자는 예상된 결과를 얻어야 합니다.

$ . ~/.ssh-agent-info/variables
Agent pid 25965
$ ssh-add -l
256 SHA256:Ayd3PCiSkVVV09IqwEXz2Fn3nuXF70FDPMlNtZiuTtY user@host (ED25519)

ssh-agent이는 사망하거나 키를 잊어버리도록 요청받을 때까지 더 이상 비밀번호를 제공할 필요가 없음을 의미합니다 .

이는 포트가 있는 모든 플랫폼에서 거의 작동합니다.SSH를 열어그리고 ssh-agent저는 이것이 WSL에서도 동일하게 잘 작동할 것이라고 믿습니다.

이상적으로는 이러한 명령을 셸 시작 스크립트(예: )에 넣어 새 스크립트를 생성하기 전에 (올바른) 스크립트가 이미 실행 중인지 먼저 감지하고, 그렇지 않으면 프로세스가 누출되는 방식 .profile으로 만들어야 합니다. ssh-agent비밀번호를 다시 입력해야 합니다.

관련 정보