我家里的机器上运行着 Ubuntu 9.10 桌面版。我需要定期将文件从本地机器上传到我的 Web 服务器。我的服务器运行的是 Ubuntu Server LTS。
我希望我的服务器是安全的,并且只运行 LAMP 堆栈和电子邮件服务器。我(理想情况下)不希望有 FTP 或任何可能让(更)有经验的黑客能够入侵我的服务器的东西。
有人能建议我如何将文件从本地机器发送到服务器吗?
这似乎是一个简单/琐碎的问题,但我对 Linux 还比较陌生 - 而且我之前的 Windows 服务器机器曾经遭到过严重的黑客攻击,因此转向了 Linux,这就是我如此注重安全的原因。
[编辑]
似乎有很多方法可以做到这一点(从我迄今为止收到的答案来看) - 但似乎没有明显的赢家。因此,我添加了一些更多信息,希望出现一个明显的赢家(就最佳实践而言)。
我想自动执行此操作-即从 shell 脚本作为 cron 作业运行。
我担心安全问题,因此,我不想在脚本中使用纯文本形式的密码,也不想发送未加密的密码等
客户端和(远程)服务器均基于 Debian,因此希望文件权限能够保留在副本中。
i. 如果这不可能,谁将成为复制文件的默认所有者?上传的文件将由另一个脚本(在服务器上)读取。上传脚本和处理脚本之间的关系(就文件权限而言)应该是什么?
答案1
rsync 是一种在服务器之间传输文件的便捷方式。开箱即用,可通过 SSH 工作(并支持基于密钥的无密码 SSH 连接)。
您可以从本地复制到远程或从远程获取到本地等。例如:
# copy files to another server
rsync -avz /mnt/myfiles/ [email protected]:/srv/myfiles
在远程服务器上,最好使用非 root 帐户,并设置 authorized_keys 条目,这样您就无需输入密码。直接通过 SSH 进入另一台服务器上的 root 不是一个好主意 - 如果您需要远程服务器上的 root 权限,请从该端执行 rsync。如果您认为您需要两台服务器上的 root 权限,则可能不需要:查看 rsync 的--fake-super
选项。
我在网上查看了很多 HOWTO,其中很多都推荐了一些糟糕的做法,或者已经过时了(推荐 authorized_keys2、rsa 等)。我推荐这个,它在安全方面很好: http://troy.jdmz.net/rsync/index.html
答案2
其他的,在我看来非常方便的方法是将远程目录挂载为本地使用sshfs
,然后像其他任何方式一样复制文件。
sshfs user@remotemachine:/remote/dir /local/dir
cp /one/file /local/dir/.
答案3
您可能已经使用 ssh 连接到服务器。因此请使用 scp 或 sftp,它们使用 ssh 作为协议
scp localfile [email protected]:/path/to/place/localfile
它会提示你输入密码
如果您希望它变得更容易、更安全,请研究使用 ssh 密钥登录
编辑
这是 sftp.. 一旦你进入,它就像正常的 ftp 一样工作
sftp [email protected]
> cd /dir/dir2/dir3
> put localfile
如果你想自动化,我会使用 scp。因此要创建一个 sshkey
ssh-keygen -t dsa
如果你想自动化它,我建议不要使用密码
现在你想复制钥匙
ssh-copy-id [email protected]
然后,您就可以使用该密钥以该用户的身份通过 ssh 登录,无需密码。您也可以使用相同的 scp 帐户,无需密码,但它只适用于您为其创建密钥的用户。
答案4
如果您需要 GUI 而不是命令行选项,只需使用 SFTP。FileZilla 是一款非常易于使用和拖放的客户端,当然 SFTP 可以通过 SSH 连接完成所有操作。
再次连接到远程服务器上的非 root 帐户 - 您可以通过向远程计算机添加 authorized_keys 条目来设置无密码登录。您需要 Pageant(PuTTY 附带)来管理 Windows 上的密钥。