Ви можете встановити ssh-з'єднання протягом сеансу cron. Вам потрібно встановити автентифікацію відкритого ключа для доступу без пароля. Щоб це працювало, вам потрібно мати PubkeyAuthentication yes
в кожному віддаленому сервері sshd_config
.
Ви можете створити пару приватного / відкритого ключа із паролем або без нього. Якщо ви використовуєте парольну фразу (рекомендовану), вам також потрібно запустити ssh-агент. Без парольної фрази вам потрібно лише додати параметр -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-агент як службу -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
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
Єдина проблема використання парольної фрази полягає в тому, що вам потрібно ввести її вручну хоча б один раз. Отже, вищезгадане не працюватиме автоматично після перезавантаження.