【问题标题】:executing rsync from local that ssh to remote and copys to secondary remote从 ssh 到远程的本地执行 rsync 并复制到辅助远程
【发布时间】:2019-02-21 15:57:22
【问题描述】:

好的,所以我想做的是有一个脚本,我从本地(1)执行,ssh 到远程(1)和 rsync /path/to/file 到远程(2)/path/到/文件

#!/usr/bin/expect

set oldIP "[lrange $argv 0 0]"
set newIP "[lrange $argv 1 1]"

set password "123..."
set admin "User"
set host localhost


spawn ssh '$admin'@'$oldIP' 
expect -exact "Password: "  
sleep 3
send -- "$password\r" 
expect -exact "$host:~ user# " 
send -- "rsync -azvH --numeric-ids -W --force /path/ '$newIP':/path/"
expect -exact "Password: "  
sleep 3
send -- "$password\r"
sleep 1
send -- quit\n"

【问题讨论】:

  • 如果您使用的是 RSA 密钥身份验证而不是密码,那么您根本不需要使用expect ——它只是ssh -A admin@host1 "rsync -azvH --numeric-ids -W --force /path host2:/path"(主要是;转义主机名以抵抗 shell 注入尝试是一个单独的问题,但我们已经在这里介绍了)。 -A 启用代理转发,因此远程rsync 可以使用存储在本地代理中的密钥对最终目标主机进行身份验证。
  • (您的最后一次发送缺少")。您需要添加一个最终的interact 或类似的内容以等待rsync 完成,否则您将过早关闭ssh 连接。

标签: bash ssh expect rsync


【解决方案1】:

我建议您不要使用 expect 命令更好地创建从远程 1 服务器到远程 2 服务器的无密码登录,然后设置一个可以自动执行的 cron 作业。

您可以参考以下链接了解如何设置无密码登录:

https://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

【讨论】:

  • 我将来可以并且可能会这样做,但我正在尝试做的事情不会涉及持续的需求。这些不是服务器,我只是想从当前机器获取一些 /Users/ 信息并将其传输到新机器。
  • 尝试在调试模式下执行你的脚本。希望你能找到一些线索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2010-12-28
  • 2012-02-23
相关资源
最近更新 更多