【问题标题】:How to copy files from local machine to server using SSH file transfer protocol?如何使用 SSH 文件传输协议将文件从本地机器复制到服务器?
【发布时间】:2011-02-18 03:22:35
【问题描述】:

我有一台本地使用的 Ubuntu 9.10 台式机。我正在托管服务提供商上设置服务器。该服务器将运行一个非常小的版本的 Ubuntu 服务器 LTS(只有 LAMP 和电子邮件服务器,没有 GUI)。

我想编写一个脚本(计划为 cron 作业),允许我将本地文件上传到服务器。出于安全原因,我想使用 [SFTP][1]。

我是 shell 脚本的新手 - 但我想 shell 脚本是这样做的方法(除非我弄错了)。

谁能向我提供有关如何编写这样一个脚本的初始指示,以便将本地文件安全地上传到服务器?

理想情况下,我想在传输前压缩文件(以节省带宽)

[1]:http://SSH文件传输协议

【问题讨论】:

标签: ubuntu shell sftp


【解决方案1】:

如何使用 SSH 文件传输协议将文件从本地机器复制到服务器?

使用scp

我想在 cron 工作中完成。

在 cron 作业中使用 scp 的主要问题是:您从哪里获得凭据? 明码标明密码不是一个好主意。一个更好的主意是在你的机器上运行一个ssh-agent 进程。要找到合适的ssh-agent,您可以运行以下脚本:

#!/bin/sh

for i in $SSH_AUTH_SOCK /tmp/ssh*/agent*
do
  if [ -r "$i" -a -w "$i" ]; then
    case `SSH_AUTH_SOCK="$i" ssh-add -l` in
      *:*:*) echo "$i"; exit 0 ;;
    esac
  fi
done

exit 1

如果脚本成功,您将获得一个值,您可以在运行scp 之前将其放入SSH_AUTH_SOCK 环境变量中。

当您启动客户端时,您应该通过启动 ssh-agent 并运行 ssh-add 来提供您的凭据。

【讨论】:

  • SSH 代理在哪台机器上运行(客户端 [桌面] 或远程服务器)?
  • @morpheous:SSH-agent 在客户端运行;服务器将公钥保存在authorized_keys 文件中。如有必要,您可以使用ssh-keygen 创建一对。
【解决方案2】:

无论您将其拼写为“SECURE”还是“secure”,我们都无法读懂您的想法并说出您想要保护的内容。所以我会给出一个基本的食谱,告诉你它有什么好处。这可能应该全部转移到超级用户。

  1. 学习基本的 bourne shell。一个教程不适合stackoverflow的答案。
  2. 运行 ssh-keygen 来制作 ssh 密钥对。由于您想从 cron 运行 scp,因此不能使用密码短语 AFAIK。这意味着您必须非常确定您从中复制的机器不会受到入侵者的攻击。
  3. 将公钥从 ssh 密钥对复制到目标计算机上的 .ssh/authorized_keys。
  4. 通过运行 'ssh target-machine' 并成功登录 sans-password 来证明这是可行的。

现在,您可以制作一个使用 scp 命令进行实际复制的 shell 脚本。开始于:

#!/bin/sh
scp PATHNAME_OVER_HERE target-host:/PATHNAME_OVER_THERE

这对于基本密码间谍和通过 telnet 连接到目标主机的随机数是安全的。如果源系统不安全,则不安全,我不能保证 ssh 协议的安全性,尽管它确实被广泛使用。

【讨论】:

  • bmargulies:谢谢,这就是我开始时需要知道的。关于大写安全性,这是一个“胖手指”问题(缺少咖啡;))
猜你喜欢
  • 1970-01-01
  • 2015-08-13
  • 2021-07-29
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多