Bạn có thể tạo kết nối ssh trong một phiên cron. Những gì bạn cần là thiết lập một xác thực khóa công khai để có quyền truy cập không mật khẩu. Để làm việc này, bạn cần phải có PubkeyAuthentication yes
trong mỗi máy chủ từ xa sshd_config
.
Bạn có thể tạo một cặp khóa riêng / chung có hoặc không có cụm mật khẩu. Nếu bạn sử dụng cụm mật khẩu (recommented), bạn cũng cần bắt đầu ssh-agent. Nếu không có cụm mật khẩu, bạn chỉ cần thêm tham số -i your_identity_file
vào ssh
dòng lệnh. ssh
sẽ sử dụng $HOME/.ssh/id_rsa
như mặc định.
Tôi đã sao chép ví dụ của bạn bằng cách sử dụng một cặp khóa với cụm mật khẩu. Đây là cách tôi đã làm nó.
1) Tạo cặp khóa với cụm mật khẩu. Đã lưu khóa riêng dưới dạng ~/.ssh/id_rsa_test
, phải có quyền chính xác theo mặc định. Chúng tôi có thể nhập một cụm mật khẩu trống để không sử dụng một mật khẩu.
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) Đã gửi khóa công khai tới các máy chủ, thực hiện tương tự cho tất cả chúng. Hãy nhớ rằng họ cần phải PubkeyAuthentication
kích hoạt.
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) Chạy ssh-agent như dịch vụ với -s
. Điều này sẽ không giết nó nếu bạn đăng xuất. Đầu ra của nó là một tập lệnh shell hợp lệ, thiết lập môi trường để ssh client sẽ biết cách kết nối với nó. Chúng tôi lưu nó vào một tập tin (chỉ dòng đầu tiên là thực sự cần thiết).
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) Đã tải ở trên vào môi trường hiện tại của chúng tôi để chúng tôi có thể sử dụng ssh-add
để thêm khóa riêng của mình vào ssh-agent
. cụm mật khẩu từ trên.
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) Xác nhận nó được thêm vào.
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) Kịch bản tôi đã sử dụng, sửa đổi một chút so với của bạn. Lưu ý rằng tôi đã không đặt lệnh ssh trong ngoặc đơn và không sử dụng backticks $()
, đây là cách thay thế tốt hơn để thay thế lệnh (điều này bash
tương thích, bạn không đề cập đến việc bạn đang sử dụng shell nào). Tôi đã sử dụng chính xác lệnh ssh như của bạn.
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 của tôi (lưu ý rằng tôi sh
thực sự bash
)
john@coffee:~$ crontab -l
# m h dom mon dow command
*/1 * * * * sh /home/john/foo.sh
8) Đầu ra
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
Vấn đề duy nhất khi sử dụng cụm mật khẩu là bạn cần nhập thủ công ít nhất một lần. Vì vậy, ở trên sẽ không tự động hoạt động sau khi khởi động lại.