rsync over ssh:可以在命令行输入ssh密码吗?

rsync over ssh:可以在命令行输入ssh密码吗?

我发现您可以创建一个 SSH 密钥,以便通过 ssh 使用 rsync,而无需输入密码。

但是我在 Eclipse/ANT 中通过 ssh 使用 rsync,其中可以交互地输入密码,但是 eclipse 和 rsync 命令之间的交互不是交互式的(它是一个命令行 exec 调用),所以我需要在命令行上指定在 eclipse 中获得的密码。

这可能吗?

答案1

在我和电脑之间进行了一场激烈的斗争之后,我终于找到了一个我在任何文章中都找不到的答案。我会发布一篇关于它的博客。

解决方案是使用仅在 ant 1.8.3 的 alpha 版本中修复的新功能,该功能似乎只是对 1.8.2 发行版本的错误修复,因此即使使用 alpha 标题,它也足够稳定。该功能允许您将数据(即密码)传递到脚本的 STDIN。然后,您可以使用标准 Linux 工具或 Windows 上的 cygwin 将密码read从 STDIN 中取出并将其用作变量。

无依赖关系,没有密钥文件,命令行上没有泄露的密码,没有存储的密码。我终于在过去几天里所遭受的黑暗沉闷的生活之外看到了一些光明。

下面是一个执行此操作的 ANT 任务:

<input message="Enter username for ${website.host}:" addproperty="host.username" />
<input message="Enter password for ${website.host}:" addproperty="host.password" />

<sshexec host="${website.host}" trust="true"
         username="${host.username}" password="${host.password}"
         inputstring="${host.password}"
         command='read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"' />

注意命令行:

read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"

首先我们read将 STDIN 放入变量中var。然后我们启动expect执行一些需要用户交互的操作:sudo在本例中。当sudo提示我们输入密码时,我们从存储的变量中发送密码varwait完成该过程。

答案2

由于您知道这两台机器,因此您可以放心地忽略单个用户的密码,然后:

  1. 授予 rsync 用户对 rsync 的 sudo 权限,以便他们可以访问所有内容

  2. 使用远程计算机上的 rsync 用户设置私钥/无密码登录,并通过 ssh 使用 sudo 调用 rsync

这样,密码就不再重要了,您会更安全。

答案3

您可以只使用 ssh-agent 和 keychain。

相关内容