我正在尝试使用UNIX shell脚本自动化我的SFTP命令,但由于某种原因它不起作用。这是我的代码如下。请分享您的想法/见解。
#This ftp script will copy all the files from source directory into the local directory.
#!/bin/sh
HOST='sftp.xyz.com'
USER='ABC'
PASSWORD='123'
SRC_DIR='From_Src'
TRGT_DIR='/work/'
FILE='abc.txt'
sftp -u ${USER},${PASSWORD} sftp://${HOST} <<EOF
cd $SRC_DIR
lcd $TRGT_DIR
get $FILE
bye
EOF
echo "DONE"
当我尝试执行上面的代码时,我得到以下错误。
sftp: illegal option -- u
usage: sftp [-1246Cpqrv] [-B buffer_size] [-b batchfile] [-c cipher]
[-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit]
[-o ssh_option] [-P port] [-R num_requests] [-S program]
[-s subsystem | sftp_server] host
sftp [user@]host[:file ...]
sftp [user@]host[:dir[/]]
sftp -b batchfile [user@]host
答案 0 :(得分:1)
-u
没有sftp
选项,请参阅manual了解可用选项。您可以使用以下格式传递用户名:
sftp username@hostname
所以在你的情况下:
sftp sftp://${USER}@${HOST} <<EOF
这会提示您输入密码。如果您不想要密码提示,请查看以下主题:How to run the sftp command with a password from Bash script?
答案 1 :(得分:0)
首先,了解如何设置密钥,以便您可以在没有密码的情况下将ssh,scp和sftp添加到服务器。看看ssh-keygen。这很容易。我敢打赌这个网站上有多少东西。简而言之,使用ssh-keygen生成密钥。它们是在〜/ .ssh中创建的。然后将您的公钥添加到目标主机上的〜/ .ssh / authorized_keys,其中〜是您要登录的用户的主目录。即你的例子中的“ABC”。
现在,您可以执行“sftp ABC@sftp.xyz.com”,您将在sftp.xyz.com上进行sftp提示。从那里开始,让脚本工作应该很容易。
我真正的建议是吹掉sftp并使用scp。例如
scp /path/to/the/source_file user@host:/remote/path/file
就这么简单。没有“cd”和其他要处理的垃圾。你这样做比实际更难。
祝你好运