scp里面sh脚本与密码短语

我有一个sh脚本备份

scp /mybackupdir/* backupuser@backupserver:/backup 

有没有简单的方法来添encryption码到SCP? 或者我必须检查一个SSH代理程序是否正在运行,如果不启动一个,并添encryption钥?

首先,我们来分析一下容易混淆的因素:

  • SSH(以及scp)支持各种authentication方法。 目前最stream行的两种是“密码”和“公钥”
  • 如果使用“publickey”,那么客户端必须有私钥和公钥文件[1]。 私人密码可以用或不用密码encryption
  • 当使用“publickey”方法时,ssh-agent可以在内存中保存私钥。 当私钥文件被encryption,并且不想一次又一次地input密码时,这可能会很方便。 但是,在使用基于密码的authentication方法时,ssh-agent没有帮助。

在SSH的情况下,当人们使用术语…

  • …“密码”,通常是指基于密码的authentication方式
  • …“密码”,它们通常是指私钥文件被encryption的密码

……但这当然只是一个惯例而且是混乱的一个重要来源。


这就是说,我试图回答你的问题:

如果您的意思是基于密码的SSHauthentication

  • 使用允许以批处理模式提供SSH密码的客户端软件(例如命令行选项,STDIN或环境variables)。 OpenSSH不支持这个!
  • 或者在ssh / scp中包装一个'expect'脚本,正如[2]中所讨论的那样。
  • 或者从基于密码切换到公钥authentication。

如果您的意思是使用密码encryption的私钥文件进行公钥身份validation

  • 从私钥文件中删除密码保护,参见例如[3]。
  • 或者将密钥手动预加载到ssh-agent中,并确保(a)脚本运行时ssh-agent仍然存活,(b)脚本可以find代理的unix套接字($ SSH_AUTH_SOCK)

你不能用参数提供密码给scp。

但是,您可以使用按键身份validation:ssh-keygen将生成rsa密钥对进行身份validationssh-copy-id将您的公钥复制到另一个主机。

如果你不能或不想用密钥进行身份validation,那么你可以编写期望脚本,并从脚本中提供密码。 这不是实现这个最安全的方式!

你应该阅读这篇文章:

执行无密码SSHlogin的3个步骤使用ssh-keygen

你可以改变你的脚本:

 rsync --rsh='ssh -p(Type your SSH port)' -av /yourBackupDir [email protected]:/backup | mail -s "backup on `hostname`" [email protected] 

您不需要ssh代理公钥authentication。 您只需将所需的密钥通过-i命令行parameter passing给ssh或scp即可。