| 
  • Increase font size
  • Decrease font size
  • Default font size
  • default color
  • red color
  • green color
香农数据安全在线
Jul 30th
首 页 arrow 数据存储 arrow 容灾/备份 arrow Linux 上进行自动备份

Linux 上进行自动备份 输出PDF
作者: 转载   
2005-08-13

Linux 上进行自动备份

[offsite]$ ssh-agent
  SSH_AUTH_SOCK=/tmp/ssh-XX1O24LS/agent.14179; export SSH_AUTH_SOCK;
  SSH_AGENT_PID=14180; export SSH_AGENT_PID;
  echo Agent pid 14180;

我们可以使用 shell 的 eval 命令来让 shell 执行 ssh-agent 显示的输出命令:

[offsite]$ eval `ssh-agent`
Agent pid 14198

eval 命令告诉 shell 去评价(执行)ssh-agent 程序生成的命令。确保您指定的是反引号(`)而不是单引号!执行后,eval `ssh-agent` 语句将返回代理的进程标识符。在幕后,SSH_AUTH_SOCK 和 SSH_AGENT_PID shell 变量已经被导出而可以使用。您可以将它们显示在 shell 控制台中来查看它们的值:

[offsite]$ echo $SSH_AUTH_SOCK
/tmp/ssh-XX7bhIwq/agent.14197

$SSH_AUTH_SOCK (SSH Authentication Socket 的缩写)是一个本地套接字的位置,应用程序可以通过它来与 ssh-agent 通信。 将 eval `ssh-agent` 语句加入到您的 ~/.bash_profile 文件以 确保 SSH_AUTH_SOCK 和 SSH_AGENT_PID 始终 被注册。

ssh-agent 现在就已经成为一个后台进程,可以用 top 和 ps 命令查看得到。

现在我们就已经可以使用 ssh-agent 共享我们的口令。为此,我们必须使用一个名为 ssh-add 的程序, 这个程序将我们的口令添加(发送)到运行着的 ssh-agent 程序。

清单 8. 用于免口令登录的 ssh-add


[offsite]$ ssh-add
  Enter passphrase for /home/accountname/.ssh/id_dsa: (enter passphrase)
  Identity added: /home/accountname/.ssh/id_dsa
  (/home/accountname/.ssh/id_dsa)

现在,当我们访问 server1 时,不会再被提示输入口令:

[offsite]$ ssh 此邮件地址受spam bots保护,需要使用 Javascript 功能来查阅。
[server1]$ exit

如果您还不相信,那么尝试去掉(kill -9)ssh-agent 进程,然后 重新连接 server1。这一次,您将注意到,server1 将会询问存储在 .ssh 目录下 id_dsa 中的私钥的口令:

[offsite]$ kill -9 $SSH_AGENT_PID
[offsite]$ ssh 此邮件地址受spam bots保护,需要使用 Javascript 功能来查阅。
Enter passphrase for key '/home/accountname/.ssh/id_dsa':

使用 keychain 简化密钥访问
到现在为止,我们已经了解了几个 OpenSSH 程序(ssh、scp、ssh-agent 和 ssh-add),而且 我们已经创建并安装了私钥和公钥来启用一个安全而且自动的登录过程。您可能已经意识到,大部分设置工作只需要进行一次。例如,创建密钥、安装密钥、通过 .bash_profile 执行 ssh-agent 的过程在每台机器只需要进行一次。那真是好消息。

不太理想的消息是,我们每次登录到离线的机器上时,都必须调用 ssh-add,而且,ssh-agent 与我们将要用来自动化备份工作的 cron 调度进程并不直接兼容。cron 进程不能与 ssh-agent 通信的原因是,cron 作业是作为 cron 的子进程来执行,这样它们就不会继承 $SSH_AUTH_SOCK shell 变量。

幸运的是,有一个解决方案不但可以消除 ssh-agent 和 ssh-add 的局限,而且可以让 我们使用 cron 来自动进行各种需要对其他机器进行安全地无密码访问的过程。在他 2001 年 发表的三篇 developerWorks 系列文章中,即 OpenSSH key management(参阅 参考资料 以获得链接),Daniel Robbins 介绍了一个名为 keychain 的 shell 脚本,它是 ssh-add 和 ssh-agent 的一个前端,简化了整个无密码的过程。随着时间的 过去,keychain 脚本已经经历了很多改进,现在由 Aron Griffis 维护,其最新的 2.3.2-1 发布版本 公布于 2004 年 6 月 17 日。

keychain shell 脚本太长以致于无法在本文中列出,因为精心编写的脚本中包括了很多错误 检测、丰富的文档以及非常多的跨平台代码。不过,keychain 可以自项目的 Web 站点上方便地 下载得到(参阅 参考资料 以获得链接)。

下载并安装了 keychain 后,使用它就很简单了。只需要登录到每台机器并将下面两行添加到 每个 .bash_profile 文件:

keychain id_dsa
. ~/.keychain/$HOSTNAME-sh

在您第一次重新登录到每台机器时,keychain 将向您询问口令。不过,除非机器被重新启动,否则, 以后再登录时,keychain 将不会再要求您重新输入口令。最好的是,cron 任务现在可以使用 OpenSSH 命令来安全地访问远程的机器,而不需要交互地使用口令。更好的安全和更容易的使用, 现在我们已经兼得。

清单 9. 在每台机器上初始化


KeyChain 2.3.2; http://www.gentoo.org/projects/keychain
  Copyright 2002-2004 Gentoo Technologies, Inc.; Distributed under the
  GPL

  * Initializing /home/accountname/.keychain/localhost.localdomain-sh
  file...
  * Initializing /home/accountname/.keychain/localhost.localdomain-csh
  file...
  * Starting ssh-agent
  * Adding 1 key(s)...
  Enter passphrase for /home/accountname/.ssh/id_dsa: (enter passphrase)


 
< 上一篇   下一篇 >

数据存储供应商