목록에서 여러 노드로 SSH를 통해 연결하고 필요한 세부 정보를 가져오는 데 사용하는 CoreOS 컴퓨터에 아래와 같은 스크립트가 있습니다.
host_det=$(ssh -Ao StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 -l $user $node "
hostname
docker ps | grep haproxy
sudo df -h |grep abcd ")
비밀번호 없이 구성된 루트가 아닌 사용자를 사용하여 ssh를 실행하고 있는데, 동일한 사용자로 정상적으로 실행하면 제대로 작동합니다. (./ssh.sh)
systemd 타이머를 사용하여 이 스크립트를 예약한 후 ssh에서 비밀번호를 묻고 스크립트가 실패합니다. 타이머를 사용하면 루트 사용자로 실행되므로 ssh 사용자를 명시적으로 지정하더라도 비밀번호를 묻는 이유가 있습니다. CoreOS에서 루트가 아닌 사용자를 위해 타이머를 예약할 수 있는 방법이 있습니까?
내 타이머와 서비스 파일은 다음과 같습니다.
cat /etc/systemd/system/ssh.timer
[Unit]
Description=Run ssh.service every morning 8:30
[Timer]
OnCalendar=*-*-* 08:30:00
Persistent=true
[Install]
WantedBy=multi-user.target
cat /etc/systemd/system/ssh.service
[Unit]
Description=Run the ssh script
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/home/user_name/ssh.sh 2>/tmp/date'
답변1
당신은 정의해야
User=user_name
.service 파일에서 다른 사용자로 실행하십시오.
답변2
문제는 SSH_AUTH_SOCK
스케줄러 환경이 일반 환경과 다르다는 점이다. 작업을 내보낸 후 SSH_AUTH_SOCK
스크립트가 예상대로 작동하기 시작했습니다. 당신의 도움을 주셔서 감사합니다.