我想将 .png 文件从我计算机上的目录传输到远程服务器上的目录。
我必须使用 SFTP 来保护文件和传输模式。而且我已经有一个 UNIX 脚本 (.ksh) 文件以正常模式复制文件。如何在 SFTP 模式下实现传输?
我想将 .png 文件从我计算机上的目录传输到远程服务器上的目录。
我必须使用 SFTP 来保护文件和传输模式。而且我已经有一个 UNIX 脚本 (.ksh) 文件以正常模式复制文件。如何在 SFTP 模式下实现传输?
使用sftp
而不是您在.ksh脚本中使用的任何命令。请参阅sftp man以供参考。
您可能还想查看scp
secure copy- scp man。
sftp
多用于交互操作,需要指定要连接的主机:
sftp example.com
系统将提示您输入用户名和密码,交互式会话将开始..
虽然它可以在脚本中使用,但它scp
更易于使用:
scp /path/to/localfile user@host:/path/to/dest
将提示您输入密码..
两者都scp
用作sftp
底层ssh
协议,请参阅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
创建一个文件并将其保存为 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 并期望:
#!/bin/bash
expect -c "
spawn sftp username@your_host
expect \"Password\"
send \"your_password_here\r\"
interact "
您可能需要安装期望,将“密码”的措辞更改为小写“p”以匹配您收到的提示。这里的问题是它在文件以及命令历史记录中以纯文本形式公开您的密码。这几乎违背了首先拥有密码的目的。