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

时间:2010-05-11 12:49:35

标签: ubuntu shell sftp

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

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

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

任何人都可以向我提供有关如何编写此类脚本的初始指示,以便安全地将本地文件上传到服务器吗?

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

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

2 个答案:

答案 0 :(得分:6)

无论你拼写'安全'还是'安全',我们都无法理解你的想法并告诉你想要保护什么。所以我会给出一个基本配方并告诉你它有什么用处。这可能应该都转移到超级用户身上。

  1. 学习基本的bourne shell。它的教程不适合stackoverflow答案。
  2. 运行ssh-keygen来创建一个ssh密钥对。由于你想从cron运行scp,你不能使用密码,AFAIK。这意味着您必须非常确定要复制的计算机是否安全,不受入侵者的侵害。
  3. 将公钥从ssh密钥对复制到目标计算机上的.ssh / authorized_keys。
  4. 证明这可以通过运行'ssh target-machine'并成功登录sans-password来实现。
  5. 现在,您可以创建一个使用scp命令执行实际副本的shell脚本。从:

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

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

答案 1 :(得分:4)

  

如何使用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

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

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