ftp用户名和密码在shell脚本中自动执行

时间:2016-03-30 18:02:04

标签: shell

我想创建 .sh文件

// Tried to connect to ftp server ftp name_of_server
//input user name username //input password password

链接如下 https://github.com/prokid221/shell-programing.git

而不是登录,它再次要求输入用户名和密码 任何人都可以帮助解决这个问题吗?

4 个答案:

答案 0 :(得分:0)

最佳解决方案是查看您的ftp命令手册。它可能提供命令行标志或可以使用环境变量来指定用户名和密码。

如果没有这样的东西,另一种方法是提供ftp标准输入。我想这是你尝试做的,但是这就是你的脚本所做的:

  1. 运行ftp并等待命令返回。这就是ftp询问用户名的地方。
  2. 返回ftp后,运行以用户名命名的命令。可能没有这个名字的命令所以它会抱怨它。
  3. 然后,运行以密码命名的命令。它也会失败,但根据密码中的特殊字符,它可能会变成一场灾难: - )
  4. 因此,要真正提供stdin,您可以使用printf(1):

    printf "username\npassword\n" | ftp name_of_website
    

    修改:我忘记的另一种方法是将这些信息放入网址:ftp://username:password@name_of_website

答案 1 :(得分:0)

尝试:

#!/bin/sh
HOST='your.ftp.server.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
#put $FILE
#quit
END_SCRIPT
exit 0

如果您想从脚本外部提供主机名作为命令行,那么您可以使用,
HOST = $1, 因此,如果您的scriptname为serverftp.sh,则会将主机名设置为;
serverftp.sh <ftp_server_name>

答案 2 :(得分:0)

如果您只需要文件传输,则可以使用curl。

下载文件:

curl -O -u user:password ftp://example.com/some-file

上传文件:

curl -T some-file -u user:password ftp://example.com

答案 3 :(得分:0)

如何在shell脚本中使用expect

#!/bin/sh
SERVER="example.com"
ID="toor"
PASSWD="secret"

expect <<EOF 
    spawn ftp $SERVER 
    expect ": "
    send "$ID\r"
    expect "Password:"
    send "$PASSWD\r"
    expect "ftp>"
    send "ls\r
    expect "ftp>"
    send "quit\r
    interact
EOF