cron 세션 내에서 ssh 연결을 작성할 수 있습니다. 비밀번호없이 액세스 할 수 있도록 공개 키 인증을 설정해야합니다. 이것이 작동하려면 PubkeyAuthentication yes
각 원격 서버 에 있어야 합니다 sshd_config
.
암호를 사용하거나 사용하지 않고 개인 / 공개 키 쌍을 만들 수 있습니다. 암호 구 (권장)를 사용하는 경우 ssh-agent도 시작해야합니다. 암호없이, 당신은 단지 매개 변수를 추가 할 필요 -i your_identity_file
에 ssh
명령 줄. 기본값으로 ssh
사용 $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 명령을 괄호로 묶지 않고 backticks를 사용하지 않고 $()
명령 대체를위한 더 나은 대안입니다 (이는 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
7) 내 crontab (내는 sh
실제로 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
암호를 사용할 때의 유일한 문제는 암호를 한 번 이상 수동으로 입력해야한다는 것입니다. 따라서 재부팅 후 위의 내용은 자동으로 작동하지 않습니다.