Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 放在哪里<&书信电报;使用sshpass循环时的EOF?_Bash_Shell_Ssh_Sshpass - Fatal编程技术网

Bash 放在哪里<&书信电报;使用sshpass循环时的EOF?

Bash 放在哪里<&书信电报;使用sshpass循环时的EOF?,bash,shell,ssh,sshpass,Bash,Shell,Ssh,Sshpass,我正在使用以下脚本循环本地文件夹中的所有文件,并使用sshpass将它们上载到sftp位置。我已经尝试了put语句来上传单个文件。但是我不知何故在哪里放置我的上遇到了问题。尝试使用如果您想为sftp生成put命令作为输入,您必须通过管道将它们传输。不能在here文档中处理循环。另外,您不应该使用sshpass-p,因为系统上的所有进程都可以通过proc和ps看到该程序的命令行,即使是其他用户也可以。(非常简短,但无论如何都是可见的。)环境变量仅对同一用户可见,尽管一般来说,ssh密钥可能仍然更可

我正在使用以下脚本循环本地文件夹中的所有文件,并使用
sshpass
将它们上载到
sftp
位置。我已经尝试了
put
语句来上传单个文件。但是我不知何故在哪里放置我的
上遇到了问题。尝试使用
如果您想为
sftp
生成
put
命令作为输入,您必须通过管道将它们传输。不能在here文档中处理循环。另外,您不应该使用
sshpass-p
,因为系统上的所有进程都可以通过
proc
ps
看到该程序的命令行,即使是其他用户也可以。(非常简短,但无论如何都是可见的。)环境变量仅对同一用户可见,尽管一般来说,ssh密钥可能仍然更可取

类似的方法可能会奏效:

#!/bin/bash
export SSHPASS=MY_PASSWORD
for f in /path/* ; do 
    echo put "$f"
done | sshpass -e sftp user@whereever:/path
unset SSHPASS
循环中的任何命令都是在本地执行的,任何要作为命令传递给
sftp
的命令都应该通过
echo
或类似方式打印。
(当然,这些命令不应该打印任何不应该转到
sftp
的内容)

$f
需要反斜杠转义。(
$f
=>
\$f
sftp
不支持
for
命令,因此您只会得到一些
无效命令。
错误我建议您使用批处理文件,而不是使用带IO重定向的harakiri。@Jakuje这都在
.sh
文件中。如果您有任何解决方案,我将很高兴看到您的解决方案。行
export-SSHPASS=xxx
做什么?我应该为“xxx”值写什么?@Disasterkid,
export-var=value
为命名变量指定一个值,并将其标记为已导出,以便在脚本启动的命令环境中可见
#!/bin/bash

FILES= /MY_LOCAL_FOLDER_PATH/*
sshpass -p 'MY_PASSWORD' sftp -o StrictHostKeyChecking=no \
    -o HostKeyAlgorithms=+ssh-dss MY_USERNAME@FTP_URL:/Import <<EOF
for f in $FILES   
do
chmod +X $f
put $f
done
EOF
#!/bin/bash
export SSHPASS=MY_PASSWORD
for f in /path/* ; do 
    echo put "$f"
done | sshpass -e sftp user@whereever:/path
unset SSHPASS