crond 计划任务中scp 命令没有执行。
-
- 帖子: 10
- 注册时间: 2009-11-19 9:23
crond 计划任务中scp 命令没有执行。
我写了一个bash脚本,通过crond任选计划自动运行。脚本里面有一行使用了scp命令;我手动运行脚本,scp命令能够运行,但是crond自动运行脚本时,scp却没有执行。scp 这命令是把一个文件复制到另外一个文件,我配置了sshkegent 和keychain来取消密码和密钥的输入。 不知道这是scp的问题,还是crond的问题。
-
- 帖子: 10
- 注册时间: 2009-11-19 9:23
Re: crond 计划任务中scp 命令没有执行。
我通过echo 重定向输出到文件夹,确定只有scp这行命令没有运行。先自己顶。。。。。 

-
- 帖子: 10
- 注册时间: 2009-11-19 9:23
Re: crond 计划任务中scp 命令没有执行。
scp脚本是普通用户编写。
crond 运行是用的root用户。
那么root用户在运行scp命令的时候,远程机器必须有root用户的公钥,并且,ssh-agent和keychian要为root用户缓存私钥密码。否则,运行脚本中scp命令的时候,将会提示输入用户密码或密钥密码。
而我只给了一个普通用户配置了ssh-agent和keychain. 因此,问题就应该出在这了。先试试再说了。
crond 运行是用的root用户。
那么root用户在运行scp命令的时候,远程机器必须有root用户的公钥,并且,ssh-agent和keychian要为root用户缓存私钥密码。否则,运行脚本中scp命令的时候,将会提示输入用户密码或密钥密码。
而我只给了一个普通用户配置了ssh-agent和keychain. 因此,问题就应该出在这了。先试试再说了。
-
- 帖子: 10
- 注册时间: 2009-11-19 9:23
Re: crond 计划任务中scp 命令没有执行。
问题已经解决,和大家一起分享吧!
原因正如上面我说的,但还稍微的复杂一点。 这个问题只相对于ubuntu ,在red hat 里面不会有这个问题。 主要是ubuntu的ssh 没能做周到。 在red hat里面,ssh 只要配置好了rsa公钥和密钥登陆,便可以不用再输入密码和密钥密码。 而utbuntu里面除此之外,还要配个ssh-keyagent和keychain。 ssh-keyagent用来缓存一个用户在一个登陆会话里的密钥密码。 通过keychain,在.profile里面设置,密钥密码缓存到keychain。keychain加密钥密码传递给ssh-keyagent,这样,用户登陆以后,就可以直接ssh远程主机了。
不同的用户,可以不用输入密码,使用同一账号来ssh远程主机。
我上面说过,我的脚本是普通用户(比如A用户)权限写的,并且scp 格式如下:scp 文件名 [email protected]:/home/.... ,我也只给A用户配置了ssh-keagent和keychian 。 也就是说,不管哪个用户运行的cron,都是用A用户来ssh到远程主机的。 因此,配置好keychain已后,只要在脚本前加上一句,source /home/A/.profile 就行。 这样,不管哪个用户来运行这个脚本,keychain能够得到要缓存的密钥密码,再交给ssh-keyagent。不用密码就可以ssh远程主机了。
原因正如上面我说的,但还稍微的复杂一点。 这个问题只相对于ubuntu ,在red hat 里面不会有这个问题。 主要是ubuntu的ssh 没能做周到。 在red hat里面,ssh 只要配置好了rsa公钥和密钥登陆,便可以不用再输入密码和密钥密码。 而utbuntu里面除此之外,还要配个ssh-keyagent和keychain。 ssh-keyagent用来缓存一个用户在一个登陆会话里的密钥密码。 通过keychain,在.profile里面设置,密钥密码缓存到keychain。keychain加密钥密码传递给ssh-keyagent,这样,用户登陆以后,就可以直接ssh远程主机了。
不同的用户,可以不用输入密码,使用同一账号来ssh远程主机。
我上面说过,我的脚本是普通用户(比如A用户)权限写的,并且scp 格式如下:scp 文件名 [email protected]:/home/.... ,我也只给A用户配置了ssh-keagent和keychian 。 也就是说,不管哪个用户运行的cron,都是用A用户来ssh到远程主机的。 因此,配置好keychain已后,只要在脚本前加上一句,source /home/A/.profile 就行。 这样,不管哪个用户来运行这个脚本,keychain能够得到要缓存的密钥密码,再交给ssh-keyagent。不用密码就可以ssh远程主机了。
