11 shell ssh authentication cron
下面是我试图运行的脚本,它运行没有任何问题
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
Run Code Online (Sandbox Code Playgroud)
但是一旦我将它添加到 crontab,它就不会给我用户。
22 12 * * * sh /home/subrahmanyam/Scripts/who.sh
Run Code Online (Sandbox Code Playgroud)
请给出你的想法......
可能是 cron Demon 正在运行,所以我们需要包含一些二进制文件......?
for*_*sck 15
您可以在 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]
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
3) 将 ssh-agent 作为服务运行-s。如果您注销,这不会杀死它。它的输出是一个有效的 shell 脚本,设置环境以便 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;
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
6)我使用的脚本,比你的略有修改。请注意,我没有将 ssh 命令括在括号中,也没有使用反引号$(),这是命令替换的更好选择(这是bash兼容的,您没有提到您使用的是哪个 shell)。我使用了与您完全相同的 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
Run Code Online (Sandbox Code Playgroud)
7)我的crontab(注意我sh的实际上是bash)
john@coffee:~$ crontab -l
# m h dom mon dow command
*/1 * * * * sh /home/john/foo.sh
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
使用密码短语的唯一问题是您需要至少手动输入一次。因此,重启后上述内容不会自动工作。
| 归档时间: |
|
| 查看次数: |
21621 次 |
| 最近记录: |