bash - 通过 ssh 运行多个 rsync 命令并且只输入一次 ssh 密码
问题描述
我正在通过脚本中包含的多个 rsync 调用在 iMac 和 Synology NAS 之间同步多个文件夹。如何使用私钥/公钥和密码添加 ssh,这样我只需在脚本运行时输入一次密码,但所有 rsync 命令都使用安全 ssh 隧道?
rsync -rtv --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --delete --exclude='.*' /Users/Username/FolderName/ username@ipaddress::Foldername/
这是每个没有 ssh 的 rsync 调用的模板。每个 rsync 调用中的文件夹名称都不同。
我可以使用密码生成 ssh 私钥/公钥并将公钥上传到 NAS 并将其合并到 authorized_keys 文件中。我了解将 ssh 添加到 rsync 命令的语法。我不知道如何通过脚本只为脚本中运行的 7 个 rsync 命令输入一次密码。任何可以为我指明正确方向的输入将不胜感激。
解决方案
如果您使用 SSH 密钥编写脚本,则不希望使用密码。除了在 TTY 上,OpenSSH 不提供输入密码短语的方法,而使用 TTY 输入密码短语的唯一方法是使用Expect之类的东西来处理密码短语条目,这是不必要的复杂。
相反,您应该使用文件系统权限,并在必要时使用专用用户来控制对密钥的访问。
推荐阅读
- python - Python 中的 Yellow Pages Scraper 停止工作
- selenium - 如何在 selenium 中为 https://www.flipkart.com/ 处理登录窗口
- python-3.x - Python OpenGL 纹理无法正确加载
- mysql - 关系数据库模式设计 - 如何直接从实体的字段集建模一对一映射
- go - scanner.Scan() 在 GoLand 调试器中挂起
- r - R 问题:如何创建一个包含 2 个变量的直方图?
- string - 如何在haskell中的空格后拆分字符串?
- java - AndroidStudio 无法在模拟器上保存文件
- apache-spark - 如何避免错误消息 java.lang.ClassCastException spark sql 2.3.1
- python - 使用 Cython 进行多处理时出错