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

Ubuntu 如何使用SSH文件传输协议将文件从本地计算机复制到服务器?,ubuntu,shell,sftp,Ubuntu,Shell,Sftp,我有一台本地使用的Ubuntu 9.10桌面机。我正在主机提供商上设置服务器。服务器将运行Ubuntu服务器LTS的最低版本(只有LAMP和电子邮件服务器,没有GUI) 我想写一个脚本(计划为cron作业),允许我将本地文件上传到服务器上。出于安全原因,我想使用[SFTP][1] 我不熟悉shell脚本——但我想shell脚本是实现这一点的方法(除非我弄错了) 有谁能为我提供一些关于如何编写这样一个脚本的初步建议,以便安全地将本地文件上传到服务器 理想情况下,我希望在传输之前压缩文件(以节省带宽

我有一台本地使用的Ubuntu 9.10桌面机。我正在主机提供商上设置服务器。服务器将运行Ubuntu服务器LTS的最低版本(只有LAMP和电子邮件服务器,没有GUI)

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

我不熟悉shell脚本——但我想shell脚本是实现这一点的方法(除非我弄错了)

有谁能为我提供一些关于如何编写这样一个脚本的初步建议,以便安全地将本地文件上传到服务器

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


[1] :文件传输协议

无论您拼写为“安全”还是“安全”,我们都无法读懂您的心思并告诉您要防范什么。所以我会给你一个基本的食谱,告诉你它有什么好处。这可能都应该转移到超级用户

  • 学习基本的bourne shell。这方面的教程不适合stackoverflow的答案
  • 运行ssh keygen以生成ssh密钥对。因为您想从cron运行scp,所以不能使用密码短语AFAIK。这意味着您必须非常确定您从中复制的机器是安全的,不会受到入侵者的攻击
  • 将公钥从ssh密钥对复制到目标计算机上的.ssh/authorized_密钥
  • 通过运行“ssh target machine”并成功登录sans密码来证明这一点
  • 现在,您可以创建一个shell脚本,它使用scp命令执行实际的复制。开始于:

    #!/bin/sh
    scp PATHNAME_OVER_HERE target-host:/PATHNAME_OVER_THERE
    
    这对于基本密码间谍和使用telnet连接到目标主机的随机性是安全的。如果源系统不安全,它就不安全,我不能保证ssh协议的安全性,尽管它确实被广泛使用

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

    使用
    scp

    我想在cron工作中完成它

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

    #!/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\u AUTH\u SOCK
    环境变量中


    启动客户端时,您应该通过启动
    ssh agent
    并运行
    ssh add

    b来显示您的凭据。argulies:谢谢,这正是我开始时需要知道的。关于大写安全性,这是一个“胖手指”问题(缺少咖啡;))SSH代理在哪台机器上运行(客户端[桌面]或远程服务器)?@morphase:SSH代理在客户端上运行;服务器在
    授权密钥
    文件中保留公钥。如有必要,您可以使用
    ssh-keygen
    创建一对。另请参阅