5

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

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

4

2 回答 2

12

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

您可能还想查看scpsecure copy- scp man

编辑

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

sftp example.com

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

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

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

将提示您输入密码..

编辑 2

两者都scp用作sftp底层ssh协议,请参阅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

有关更多信息,请参阅

于 2013-04-04T10:25:07.147 回答
2

通过 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远程计算机移动到本地计算机。

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

如何使用 Bash 脚本中的密码运行 sftp 命令?

或者,如果您想以骇人听闻的不安全方式进行操作,请使用 bash 并期望:

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

您可能需要安装期望,将“密码”的措辞更改为小写“p”以匹配您收到的提示。这里的问题是它在文件以及命令历史记录中以纯文本形式公开您的密码。这几乎违背了首先拥有密码的目的。

于 2014-11-11T19:36:07.760 回答