Crontab에서 쉘 스크립트를 사용하여 원격 컴퓨터에 SSH를 통해 연결할 수 없습니다.

Crontab에서 쉘 스크립트를 사용하여 원격 컴퓨터에 SSH를 통해 연결할 수 없습니다.

다음은 실행을 시도한 스크립트이며 문제없이 실행되었습니다.

for i in `seq 200 2100`
do
  usr=(`ssh -t -t -o ConnectTimeout=60 machine$1 finger | tail -1 | awk '{print$1}'`) 
  echo $usr
done

하지만 일단 crontab에 추가하면 사용자에게 정보가 제공되지 않습니다.

22  12  *  *  *  sh /home/subrahmanyam/Scripts/who.sh

여러분의 생각을 들려주세요...

크론 악마가 실행 중이므로 일부 바이너리를 포함해야 할 수도 있습니다...?

답변1

cron 세션에서 SSH 연결을 설정할 수 있습니다. 필요한 것은 비밀번호 없는 액세스를 위해 공개 키 인증을 설정하는 것입니다. PubkeyAuthentication yes이렇게 하려면 sshd_config.

암호를 사용하거나 사용하지 않고 개인/공개 키 쌍을 생성할 수 있습니다. 비밀번호를 사용하는 경우(권장) ssh-agent도 시작해야 합니다. 비밀번호가 없으면 간단히 명령줄 -i your_identity_file에 매개변수를 추가할 수 있습니다. 기본값 으로 사용됩니다 .sshssh$HOME/.ssh/id_rsa

비밀번호와 함께 키 쌍을 사용하여 예제를 복사했습니다. 내가 한 일은 다음과 같습니다.

1) 비밀번호를 사용하여 키 쌍을 만듭니다. 개인 키를 다른 이름으로 저장 ~/.ssh/id_rsa_test하면 기본적으로 올바른 권한이 있어야 합니다. 비밀번호가 없음을 나타내기 위해 빈 비밀번호를 입력할 수 있습니다.

john@coffee:~$ ssh-keygen -N "somephrase" -f .ssh/id_rsa_test
Generating public/private rsa key pair.
Your identification has been saved in .ssh/id_rsa_test.
Your public key has been saved in .ssh/id_rsa_test.pub.
[snip]

2) 공개 키를 서버에 보내고 모든 서버에 대해 동일한 작업을 수행합니다. PubkeyAuthentication활성화 해야 한다는 점을 기억하세요 .

john@coffee:~$ ssh-copy-id -i .ssh/id_rsa_test server1
The authenticity of host 'server1 (11.22.33.1)' can't be established.
RSA key fingerprint is 79:e8:0d:f5:a3:33:1c:ae:f5:24:55:86:82:31:b2:76.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,11.22.33.1' (RSA) to the list of known hosts.
john@server1's password: 
Now try logging into the machine, with "ssh 'server1'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

3) ssh-agent를 서비스로 실행합니다 -s. 로그아웃해도 죽지 않습니다. 그 출력은 SSH 클라이언트가 연결 방법을 알 수 있도록 환경을 설정하는 유효한 쉘 스크립트입니다. 이것을 파일에 저장합니다(실제로는 첫 번째 줄만 필요합니다).

john@coffee:~$ ssh-agent -s | head -n 1 > ssh-agent.cf 
john@coffee:~$ cat ssh-agent.cf 
SSH_AUTH_SOCK=/tmp/ssh-VhyKL22691/agent.22691; export SSH_AUTH_SOCK;

4) 위의 비밀번호를 사용하여 ssh-add개인 키를 추가 할 수 있도록 위의 내용을 현재 환경에 로드합니다 .ssh-agent

john@coffee:~$ source ssh-agent.cf 
john@coffee:~$ ssh-add  .ssh/id_rsa_test
Enter passphrase for .ssh/id_rsa_test: 
Identity added: .ssh/id_rsa_test (.ssh/id_rsa_test)

5) 추가되었는지 확인합니다.

john@coffee:~$ ssh-add -l
2048 96:58:94:67:da:67:c0:5f:b9:0c:40:9b:52:62:55:6a .ssh/id_rsa_test (RSA)

6) 내가 사용한 스크립트는 귀하의 스크립트보다 약간 수정되었습니다. ssh 명령을 괄호로 묶지 않았으며 $()명령 대체에 대한 더 나은 대안인 백틱도 사용하지 않았습니다( bash호환 가능하며 어떤 쉘을 사용하고 있는지 언급하지 않았습니다). 나는 당신과 똑같은 ssh 명령을 사용했습니다.

john@coffee:~$ cat foo.sh 
#!/bin/bash

source /home/john/ssh-agent.cf
for server in server1 server2; do
    usr=$(ssh -t -t -o ConnectTimeout=60 $server finger | tail -1 | awk '{print $1}')
    date=$(ssh -o ConnectTimeout=60 $server date)
    echo "$server - $date - $usr" >> /home/john/foo.log
done

sh7) 내 crontab( 실제로 내 crontab 은 bash)

john@coffee:~$ crontab -l
# m h  dom mon dow   command
*/1  *  *  *  *  sh /home/john/foo.sh

8) 출력

john@coffee:~$ tail -n 4 foo.log
server1 - Wed Mar 23 14:12:03 EET 2011 - john
server2 - Wed Mar 23 14:12:04 EET 2011 - john
server1 - Wed Mar 23 14:13:03 EET 2011 - john
server2 - Wed Mar 23 14:13:04 EET 2011 - john

비밀번호 사용 시 유일한 문제점은 비밀번호를 한 번 이상 수동으로 입력해야 한다는 것입니다. 따라서 재부팅 후에는 위의 내용이 자동으로 작동하지 않습니다.

답변2

비밀번호는 누가 입력하나요? 크론 작업은 SSH 에이전트에 액세스할 수 없으므로 공개 키가 작동하지 않습니다.

에이전트와 해당 키를 쿼리할 수 없으므로 ssh키 파일을 명시적으로 제공 해야 합니다 (옵션 참조).-i~ 해야 하다빈 비밀번호가 있습니다.

답변3

find나는 forcefsck와 같은 임시 파일을 저장하는 대신 활성 에이전트에서 검색을 사용하는 것을 선호합니다.

스크립팅 테마에서는 다음을 ssh-agent사용합니다.

export SSH_AUTH_SOCK=$(find /run/user/$(id -u)/ -mindepth 2 -maxdepth 2 -path '*keyring-*' -name 'ssh' -print -quit 2>/dev/null)

소켓을 검색 ssh-agent하고 첫 번째 소켓을 반환합니다. 현재 사용자로 제한되므로 실수로 다른 사용자를 사용하려고 시도하여 권한 거부 오류가 발생하는 일이 없습니다. 또한 이미 active 를 사용하고 있어야 합니다 ssh-agent(Ubuntu는 GUI 시작 시 에이전트를 시작합니다).

다른 스크립트에 넣는 경우 변수를 설정해야 하므로 source또는 를 사용하여 호출 해야 합니다..SSH_AUTH_SOCK

답변4

crontab에서 스크립트나 명령을 실행할 수 있습니다. 예를 들면 다음과 같습니다.

0 * * * * bash -c -l "/home/user/sshscript.sh"

또는

0 * * * * bash -c -l "ssh root@yourhost 'echo $HOSTNAME'"

관련 정보