如何在UNIX中使用sftp传输文件

时间:2013-04-04 10:13:36

标签: sftp

我想将.png文件从我的计算机上的目录传输到远程服务器上的目录。

我必须使用SFTP来保护文件和传输模式。我已经有一个UNIX脚本(.ksh)文件来复制正常模式下的文件。如何在SFTP模式下实现传输?

2 个答案:

答案 0 :(得分:12)

使用sftp代替您在 .ksh 脚本中使用的任何命令。请参阅sftp man以供参考。

您可能还想查看scp安全副本 - scp man

修改

sftp主要用于交互式操作,您需要指定要连接的主机:

sftp example.com

系统将提示您输入用户名和密码,交互式会话将开始..

虽然它可以在脚本中使用,但scp更容易使用:

scp /path/to/localfile user@host:/path/to/dest

系统将提示您输入密码..

编辑2

scpsftp都使用ssh作为基础协议,请参阅thisthis

设置它们从脚本运行的最佳方法是使用设置无密码身份验证。请参阅thisthis。我在我的服务器上广泛使用它..设置密钥后,你可以运行

scp -i private-key-file /path/to/local/file user@host:/path/to/remote

sftp -oIdentityFile=private-key-file -b batch-file user@host

如果您想使用密码进行身份验证,可以尝试使用expect包。最简单的脚本可能如下所示:

#!/usr/bin/expect
spawn sftp -b batch-file user@host
expect "*?assword:*"
send "pasword\n"
interact

有关详细信息,请参阅thisthisthis

答案 1 :(得分:1)

通过sftp在一行发送命令:

创建一个文件并将其另存为my_batch_file:

cd /root
get blah.txt
bye

运行此命令以执行批处理文件:

eric@dev /home/el $ sftp root@10.30.25.15 < my_batch_file
Connecting to 10.30.25.15...
Password:
sftp> cd /root
sftp> get blah.txt
Fetching /root/blah.txt to blah.txt
sftp> bye

传输文件

blah.txt从远程计算机移动到本地计算机。

如果您不想指定密码,请执行以下操作:

How to run the sftp command with a password from Bash script?

或者如果你想以hacky不安全的方式做这件事,请使用bash并期待:

#!/bin/bash
expect -c "
spawn sftp username@your_host
expect \"Password\"
send \"your_password_here\r\"
interact "

您可能需要安装expect,更改密码&#39;的措辞。小写&#39; p&#39;匹配您的提示收到的内容。这里的问题是它以纯文本形式在文件中以及命令历史中公开您的密码。这几乎打破了首先获得密码的目的。