.ssh/id_dsa 비밀번호가 필요한 systemd 서비스

.ssh/id_dsa 비밀번호가 필요한 systemd 서비스

smd-loop세션 에서 프로세스를 시작하는 systemctl 서비스가 있습니다 screen. 이 프로세스에는 원격 SSH 소스(동기화 목적)에 대한 액세스가 필요하므로 내 id_dsa개인 키에 대한 액세스가 필요합니다.

제대로 작동하도록 시스템 서비스를 설정하는 방법은 무엇입니까? 다음 서비스는 프로세스를 올바르게 시작하지만 screen 세션에 연결하고 비밀번호를 수동으로 입력해야 합니다 id_dsa.

[Unit]
Description=smd loop
After=local-fs.target network.target

[Service]
User=%i
Group=users
Type=Forking
ExecStart=/usr/bin/screen -S smd-loop-win -md "smd-loop"
RemainAfterExit=yes

수동으로 시작하면 smd-loop로그인 시 비밀번호 저장을 시작하는 모듈을 설치했기 때문에 비밀번호가 필요하지 않습니다.id_dsapam_sshssh-agent

답변1

로그인할 때만 서비스를 실행해야 하는 경우 ssh-agent세션에서 시작한 서비스에 연결되도록 하십시오. 가장 쉬운 방법은 프록시 소켓에 고정 경로를 사용하는 것입니다. 시스템 작업 SSH_AUTH_SOCK및 .​ 변수가 환경에 존재하는 경우 해당 변수에 포함된 소켓 경로가 사용됩니다. 그런 다음 로그인할 때 개인 키를 실행하면 작업에서 이를 사용할 수 있습니다./home/romeovs/.ssh/darkstar.agent.socket.profilessh-agentSSH_AUTH_SOCKssh-agentssh-add

이 작업을 항상 실행해야 하는 경우 이 목적을 위해 특정 비밀번호 없는 키( )를 생성하고 및 의 제한 사항을 사용하여 ssh-keygen -t rsa -f ~/.ssh/smd.id_rsa -N ''서버에서 특정 명령만 실행하도록 승인하는 것이 좋습니다.command=from=~/.ssh/authorized_keys서버의 파일. 이 from=옵션은 키가 특정 호스트의 로그인 시도에만 유효함을 나타내며 command=클라이언트가 지정한 명령이 아닌 실행할 명령을 지정합니다.

ssh-rsa AAAA…== romeovs@darkstar no-agent-forwarding no-port-forwarding no-x11-forwarding from="[email protected]" command="somecommand --foo"

이 명령은 로그인 쉘에 의해 실행됩니다. 명령에 인수를 전달해야 하는 경우 두 가지 옵션이 있습니다.

  • 클라이언트가 시도한 원래 명령은 SSH_ORIGINAL_COMMAND환경 변수에 있습니다. 구문 분석을 시도하는 경우 인용 문제에 유의하세요.
  • 일부 환경 변수는 클라이언트에 의해 전달됩니다. 정확한 설정은 서버 구성( 파일 AcceptEnv의 지시문 sshd_config)에 따라 다릅니다.

답변2

~/.ssh암호화되지 않은 개인 키가 포함된 ID 파일을 서비스가 실행 중인 사용자의 디렉터리 에 배치해야 합니다 . 또한 예를 들어 루트로 실행 중인 경우 HOME 환경 변수를 설정해야 합니다.

ExecStart=/usr/bin/env HOME=/root /usr/bin/screen -S smd-loop-win -md "smd-loop"

또는 smd-loop호출 방법을 제어할 수 있는 경우 사용할 ID 파일을 알려주는 옵션을 ssh추가할 수 있습니다 .-Issh

어떤 경우든 ID 파일은 해당 사용자가 소유해야 하며 해당 사용자( chmod 0400 ~/.ssh/id*)만 액세스할 수 있습니다.

답변3

비밀번호를 요구하지 않고 서비스에 대한 자체 SSH 키를 생성합니다.

그런 다음 대상 시스템에서 authenticate_keys에 "command="를 사용하여 해당 키의 사용을 단일 명령으로 제한합니다.

그런 다음 대상 명령을 실행하려면 서버에 연결하기만 하면 됩니다. 다른 것을 지정할 필요가 없습니다(명령 이벤트가 실행되지 않음).

관련 정보