我有一台Ubuntu 9.10台式机,我在本地使用。我正在托管服务提供商上设置服务器。服务器将运行一个非常小的Ubuntu服务器LTS版本(只有LAMP和电子邮件服务器没有GUI)。
我想编写一个脚本(预定为cron作业),允许我将本地文件上传到服务器上。出于安全原因,我想使用[SFTP] [1]。
我是shell脚本的新手 - 但我想shell脚本就是这样做的方法(除非我弄错了)。
任何人都可以向我提供有关如何编写此类脚本的初始指示,以便安全地将本地文件上传到服务器吗?
理想情况下,我想在传输之前压缩文件(以节省带宽)
[1]:http://SSH文件传输协议
答案 0 :(得分:6)
无论你拼写'安全'还是'安全',我们都无法理解你的想法并告诉你想要保护什么。所以我会给出一个基本配方并告诉你它有什么用处。这可能应该都转移到超级用户身上。
现在,您可以创建一个使用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
来提供您的凭据。