我想将.png文件从我的计算机上的目录传输到远程服务器上的目录。
我必须使用SFTP来保护文件和传输模式。我已经有一个UNIX脚本(.ksh)文件来复制正常模式下的文件。如何在SFTP模式下实现传输?
答案 0 :(得分:12)
使用sftp
代替您在 .ksh 脚本中使用的任何命令。请参阅sftp man以供参考。
您可能还想查看scp
安全副本 - scp man。
sftp
主要用于交互式操作,您需要指定要连接的主机:
sftp example.com
系统将提示您输入用户名和密码,交互式会话将开始..
虽然它可以在脚本中使用,但scp
更容易使用:
scp /path/to/localfile user@host:/path/to/dest
系统将提示您输入密码..
scp
和sftp
都使用ssh
作为基础协议,请参阅this和this
设置它们从脚本运行的最佳方法是使用键设置无密码身份验证。请参阅this和this。我在我的服务器上广泛使用它..设置密钥后,你可以运行
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
答案 1 :(得分:1)
创建一个文件并将其另存为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;匹配您的提示收到的内容。这里的问题是它以纯文本形式在文件中以及命令历史中公开您的密码。这几乎打破了首先获得密码的目的。