ssh-agent和crontab - 有没有一个好的方法让它们相遇?

10 浏览
0 Comments

ssh-agent和crontab - 有没有一个好的方法让它们相遇?

我写了一个简单的脚本,每天晚上将svn活动日志发送给我们的开发人员。到目前为止,我在与svn仓库相同的机器上运行它,所以我不需要担心身份验证,只需使用svn的file:///地址样式即可。

现在我在家用电脑上运行脚本,访问远程仓库,所以我必须改用svn+ssh://路径。通过ssh-key的良好设置,我在正常情况下不必输入密码即可访问svn仓库。

然而,crontab无法访问我的ssh密钥/ssh-agent。我在网上看到过关于这个问题的一些解决方法,这里也提到了这个问题,但没有解决办法:

为什么从crontab执行时ssh失败,但从命令行执行时成功?

我的解决办法是在脚本顶部添加以下内容:

### 使SSH密钥正常工作的总体黑客 ###
eval `ssh-agent -s`

这在MacOSX 10.6上似乎有效。

我的问题是,这种方法有多糟糕,是否有更好的方法?

0
0 Comments

SSH-Agent和crontab之间是否有一种好的方法让它们相互配合?

在我遇到类似问题时,我的脚本(依赖于ssh密钥)在我手动运行时可以正常工作,但是在crontab中运行时失败了。

手动使用以下命令定义适当的密钥

ssh -i /path/to/key

并不能解决问题。

但最终我发现,当crontab运行SSH时,SSH_AUTH_SOCK为空。我不确定为什么会这样,但我只是运行了以下命令

env | grep SSH

复制返回的值,并将这个定义添加到我的crontab头部。

SSH_AUTH_SOCK="/tmp/value-you-get-from-above-command"

我对这里发生的事情不太了解,但它解决了我的问题。现在crontab可以正常运行了。

/path/to/key是否是一个空密钥?如果不需要输入密码,我认为你不需要使用授权套接字。

请注意上面的/tmp。这是指一个临时文件,当ssh-agent退出或计算机关闭时将被删除。

, ssh-agent在使用代理转发时也很有用。

, 是的,如果你有一个可以用于验证密钥的代理,无论是通过转发还是通过cron之外的其他进程,你可以引用该代理。Bryan Kennedy在手动和crontab操作之间的区别可能是由于自动化的cron作业无法访问代理。如果没有可访问的代理,可以使用不需要密码的私钥。通过在authorized_keys中使用'from'前缀,可以限制接受该密钥的客户端主机,从而增加无密码密钥的安全性。

0
0 Comments

问题的出现原因是在使用crontab执行脚本时,无法与ssh-agent进行交互,导致无法自动加载密钥。

解决方法是通过安装keychain工具,并在.bash_profile文件中添加相关代码。具体步骤如下:

1. 安装keychain工具。

2. 在.bash_profile文件中添加以下代码:keychain ~/.ssh/id_dsa。

3. 在脚本中使用以下代码加载ssh-agent环境变量:. ~/.keychain/$HOSTNAME-sh。

4. 如果使用csh或fish shell,keychain也会生成相应的代码。

5. 如果在cron脚本中使用keychain工具,可以使用keychain --noask --eval id_dsa命令。

6. 在执行命令时,使用eval keychain --noask --eval id_dsa命令。

这样,就可以解决ssh-agent和crontab无法配合使用的问题。

0
0 Comments

问题的原因:

ssh-agent是一个用于管理SSH密钥的进程,通过ssh-add命令将密钥添加到ssh-agent中,以便在使用SSH进行连接时自动加载密钥。而crontab是一个用于定时执行任务的工具。然而,当将ssh-agent和crontab结合使用时,会遇到一些问题。

解决方法:

为了解决这个问题,可以采取以下步骤:

1. 首先,在脚本中使用eval命令运行ssh-agent,并将其输出作为环境变量进行导入。

2. 然后,执行需要使用SSH连接的命令。

3. 最后,使用kill命令杀死SSH_AGENT_PID所指定的进程,以关闭ssh-agent。

具体的解决方法如下:

eval `ssh-agent -s`
svn stuff
kill $SSH_AGENT_PID

注意事项:

需要注意的是,仅仅运行ssh-agent而没有运行ssh-add命令是不能加载任何密钥的。在MacOS中,ssh-agent可能与其手册页所描述的行为不同。关于这个问题的答案可以在serverfault.com上找到。可能是由于系统密钥链中存储的密码以及在系统注销前添加的SSH密钥的组合。

此外,还要注意在使用crontab时,可能会出现多个ssh-agent进程在后台运行的情况,需要使用kill命令将其关闭。

0