![ssh-agent/keychain이 실행 중인데도 SSH가 여전히 비밀번호를 묻습니다.](https://linux55.com/image/139367/ssh-agent%2Fkeychain%EC%9D%B4%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%EB%8D%B0%EB%8F%84%20SSH%EA%B0%80%20%EC%97%AC%EC%A0%84%ED%9E%88%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%EB%A5%BC%20%EB%AC%BB%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
부인 성명:
이 질문을 중복으로 표시하기 전에 주의 깊게 읽어보는 것이 정말 좋을 것입니다. SSH가 /dev/tty를 찾지 못하는 것과 관련된 다른 많은 질문(여기, superuser.com, serverfault.com 등)을 읽었습니다.하지만 아무도keychain
, 실제로 이 문제를 방지해야 합니다.
라고 한:
나는 를 통과하는 Linux(Debian Stretch) 라우터를 가지고 있습니다 pppoe
. 공급자는 때때로 변경되는 동적 IP 주소를 제공합니다. 이런 일이 발생할 때마다 라우터는 SSH를 통해 다른 호스트에서 스크립트를 실행해야 합니다.
공개 키 인증을 사용하여 라우터와 다른 호스트에 SSH를 올바르게 설정했습니다. SSH 키는 비밀번호로 보호됩니다.
keychain
또한 제안한 대로 설정했습니다.여기. 이 페이지(및 기타 페이지)에 대한 내 이해에 따르면 keychain
동일한 프로세스가 모든 SSH 클라이언트에 "표시"됩니다. ssh-agent
로그인하면 시작되고 ssh-agent
(아직 실행되지 않은 경우) 비밀번호를 묻습니다(또는 ssh에서 묻도록 합니다). 그 시점부터 SSH 키는 ssh-agent
메모리에 있으며 다른 프로세스에서 쉽게 사용할 수 있습니다.
이는 다음 예외에 적용됩니다.
스크립트를 에 넣었습니다 /etc/ppp/ip-up.d
. 스크립트에는 다음 줄이 포함되어 있습니다.
eval `/usr/bin/keychain --noask --agents ssh --eval id_rsa_ipupdate`
ssh -i /root/.ssh/id_rsa_ipupdate [email protected] '/path/to/remote/command'
공급자가 새 IP 주소를 할당할 때마다 스크립트 자체가 예상대로 실행되지만 SSH 명령은 실패합니다.외딴호스트가 실행되지 않습니다. 이를 디버깅하는 데 시간이 좀 걸렸지만 pppd
별도의 파일에 디버그 메시지를 기록한 후 마침내 원인을 찾았습니다. pppd 디버그 메시지의 일부 관련 줄:
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: fp SHA256:BZSkP9mMIB+cCi5WfgYnqT2QmskTgsKHsWuNXHxIQu0
debug3: sign_and_send_pubkey: RSA SHA256:BZSkP9mMIB+cCi5WfgYnqT2QmskTgsKHsWuNXHxIQu0
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
따라서 SSH는 /dev/tty를 찾을 수 없습니다. 이는 아마도 정상일 것입니다. pppd
이 경우 내부에서 실행되므로 키보드에서 비밀번호를 읽을 수 없기 때문입니다. 여태까지는 그런대로 잘됐다.
그러나 핵심은 다음과 같습니다.ssh-agent
SSH 가 실행 중이고 관리되고 있고 키를 쉽게 사용할 수 있음에도 불구하고 keychain
SSH가 키보드에서 비밀번호를 읽고 싶어하는 이유는 무엇입니까 ?
위 스크립트 조각의 첫 번째 줄을 참고하세요. 이를 확인 SSH_AUTH_SOCK
하고 SSH_AGENT_PID
올바르게 설정하고 내보내야 합니다.
또한 명령줄에서 스크립트를 실행하면 완벽하게 실행됩니다(비밀번호가 필요하지 않음).
명확하게 말하자면 먼저 라우터에 로그인합니다. 홈페이지에서 제안한 대로 설정했기 때문에 keychain
로그인할 때 즉시 비밀번호를 묻는 메시지가 표시되었습니다. 그런 다음 명령줄에서 내 스크립트를 호출하면 암호를 묻지 않고도 예상대로 작동합니다. 그러나 스크립트를 호출하면 pppd
SSH 라인이 실패합니다.
SSH가 ssh-agent에서 키를 로드할 수 있음에도 불구하고 SSH에 /dev/tty가 필요한 이유와 이 문제를 해결하는 방법을 설명할 수 있는 사람이 있습니까?
PS 예, 적어도 한 번은 로그인할 때까지 라우터 재부팅 후 스크립트가 필연적으로 실패한다는 사실을 받아들일 수 있습니다. :-)
편집 1
나는 더 자세히 조사한 결과 다음과 같은 사실을 발견했습니다.
eval `/usr/bin/keychain --noask --agents ssh --eval id_rsa_ipupdate`
ssh-agent
위 스크립트는 공인 IP 주소 변경으로 인해 스크립트가 실행될 때 반드시 두 번째 프로세스를 생성합니다. pppd
이는 keychain
이상한 이유로 첫 번째 키(작동하는 SSH 키 포함)를 찾을 수 없음을 의미합니다.
다시 말하지만, pppd
이는 스크립트가 에 의해 실행되는 경우에만 발생합니다. 명령줄에서 스크립트를 호출하면 모든 것이 정상입니다.
지금은 버그 리포트나 그와 유사한 것을 공개하는 것을 고려 중입니다. 그건 그렇고, 내 keychain
버전은 2.8.2
.