network/if-up
SSH 키에 액세스해야 하는 거의 동일한 두 개의 스크립트가 있습니다 . SSH 개인 키에는 600의 권한이 있는데, 내 스크립트는 어떻게 이 키에 액세스합니까?
나는 이러한 스크립트가 수행하는 작업을 위해 설정한 사용자 계정과 연결된 SSH 키를 유지하는 것을 선호합니다.
스크립트를 실행하는 사용자를 찾는 방법을 모르고 내 스크립트에서 해당 사용자를 사용해 network/if-up
본 적이 없습니다 . su -l -c "my_command" mytaskuser
제가 단순한 실수를 저질렀기를 바라겠습니다.
Ubuntu에서 내 스크립트는 /etc/network/if-up.d
다른 배포판(예: openSuse)에 있으며 etc/sysconfig/network/if-up.d
.
내 스크립트는 모두 다음과 유사합니다(질문에 초점을 맞추기 위해 한 가지 예만 사용하겠습니다).
#!/bin/sh
LOGDATE="_`date +%Y-%m-%d_%H%M`"
scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log [email protected]:somelog${LOGDATE}.log
exit 0
mytaskuser로 로그인하고 스크립트를 수동으로 실행하면 스크립트가 완전히 정상적으로 작동합니다. 팔로우할 때 if-up.d/
.
나는 다음과 같은 변형을 시도했습니다.
#!/bin/sh
LOGDATE="_`date +%Y-%m-%d_%H%M`"
su -l -c "scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log [email protected]:somelog${LOGDATE}.log" mytaskuser
exit 0
그건 소용없어요. 이 스크립트가 작동하는 유일한 방법은 SSH 키(id_rsa)를 소유한 사용자로 실행하는 것입니다.
답변1
루트로 실행 하면 scp
이 디렉터리를 포함하여 루트의 홈 디렉터리에서 파일을 찾습니다 known_hosts
. 서버의 공개 키가 에 없으면 ~/.ssh/known_hosts
ssh는 사용자에게 키를 추가하라는 메시지를 표시합니다. 사용자에게 메시지를 표시하는 터미널이 없으면 ssh는 호스트가 올바른지 확인할 수 없기 때문에 연결을 거부합니다.
scp
자신의 사용자로 ()를 실행 해야 합니다 mytaskuser
.
su -c "scp -i ~/.ssh/id_rsa ~/some.log [email protected]:somelog${LOGDATE}.log" mytaskuser
-l
옵션을 다음으로 전달 하지 마십시오 su
: 로그인 쉘을 실행하려면 를 통해 전달된 명령이 무시됩니다 -c
.