암호가 없는 SSH는 하위 프로세스로 실행될 때 여전히 암호를 묻습니다.

암호가 없는 SSH는 하위 프로세스로 실행될 때 여전히 암호를 묻습니다.

개인 노트북에서 원격 작업 공간에 액세스하기 위해 비밀번호 없는 SSH(keygen)를 설정했습니다. 원격 서버에서는 비밀번호가 있는 계정을 사용하여 연결합니다. 공개/개인 키 인증을 설정하면 이 비밀번호를 입력하지 않고도 연결할 수 있습니다.

subprocess.Popen()이 원격 작업 공간에 다시 SSH 로 접속 하기 위해 Python 스크립트를 실행하고 있습니다 . 그러나 이 기간 동안에는 비밀번호 없는 SSH가 아닙니다. 권한을 확인하고 키를 삭제하고 다시 생성해 보았으나 여전히 이런 현상이 발생합니다.

아래는 관련 Python 코드입니다.

subprocess.Popen(['ssh', machine_addr, 'cd ' + workspace + \ '; python dispynode.py --serve 1 --clean --dest_path_prefix dispytmp_' + str(i)])

답변1

이 질문이 4년 전에 제기되었다는 것을 알고 있지만 동일한 문제에 부딪혔고 나에게 맞는 설명과 해결책을 찾았으므로 이 내용이 같은 상황에 있는 다른 사람들에게도 도움이 될 수 있습니다.

문맥

여러분과 마찬가지로 저도 클라이언트(Raspberry Pi)와 서버 간에 SSH 키를 생성하고 공유합니다. 비밀번호 프롬프트를 실행하지 않고도 SSH를 통해 연결할 수 있습니다 ssh user@server. 하지만 내 Python 스크립트가 연결을 시도하면 subprocess.Popen비밀번호를 묻습니다.

설명하다

문제는 어떤 이유로 Python 스크립트를 실행해야 하기 때문에 sudo를 사용하여 Python 스크립트를 실행한다는 것입니다.

따라서 ssh 명령은 subprocess.Popen에 있는 ssh 키로 실행되며 /root/.ssh/id_rsa, 생성되어 서버와 공유되는 키는 에 위치합니다 /home/user/.ssh/id_rsa.

해결책

ssh 명령에 매개변수로 올바른 ID 파일을 추가하십시오.

ssh -i /home/user/.ssh/id_rsa user@server

따라서 필요한 Python 줄은 다음과 같습니다.

subprocess.Popen(['ssh', '-i', '/home/user/.ssh/id_rsa', 'user@server']

여기에 필요한 명령(cd, mkdir 등)을 추가할 수 있습니다.

도움이 되었기를 바랍니다!

관련 정보