Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
sshpass未在bash脚本中执行_Bash_Shell_Docker_Sftp_Sshpass - Fatal编程技术网

sshpass未在bash脚本中执行

sshpass未在bash脚本中执行,bash,shell,docker,sftp,sshpass,Bash,Shell,Docker,Sftp,Sshpass,我有一个dockerfile:(这些是相关的命令) 通过此命令运行的dockerfile docker run --rm -it -v $(pwd):/home <image-name> docker-run-rm-it-v$(pwd):/home 并且我的bash脚本中的所有命令都会执行,这些命令位于已装入的卷中。这些命令的范围从npm安装到使用tar压缩文件,我想SFTP tar.gz文件 我正在使用sshpass自动登录,我知道这是不安全的,但我不担心这个应用程序 sshp

我有一个dockerfile:(这些是相关的命令)

通过此命令运行的dockerfile

docker run --rm -it -v $(pwd):/home <image-name>
docker-run-rm-it-v$(pwd):/home
并且我的bash脚本中的所有命令都会执行,这些命令位于已装入的卷中。这些命令的范围从npm安装到使用tar压缩文件,我想SFTP tar.gz文件

我正在使用sshpass自动登录,我知道这是不安全的,但我不担心这个应用程序

sshpass -p <password> sftp -P <port> username@host << EOF
    <command>
    <command>
EOF
sshpass-p sftp-pusername@host两个可能的原因

  • 您的apk命令是错误的,它应该是
    运行apkadd--updatebash openssh sshpass
    ,但我假设它是打字错误

  • 似乎缺少已知主机条目,您应该检查logs`docker logs-f,还需要为已知主机添加条目,检查下面建议的构建脚本

下面是一个工作示例,您可以尝试

Dockerfile

FROM alpine
RUN apk add --update bash openssh sshpass
COPY build.sh /home/build/build.sh
CMD ["bin/sh", "/home/build/build.sh"]

构建脚本

#!/bin/bash
echo "adding host to known host"
mkdir -p ~/.ssh
touch ~/.ssh/known_hosts 
ssh-keyscan sftp >> ~/.ssh/known_hosts 
echo "run command on remote server"

sshpass -p pass sftp foo@sftp  << EOF
    ls
    pwd
EO

因此,您将能够使用
docker compose up

show build.sh连接
sftp
容器,在该命令之前是否有任何进程正在运行,并且该进程在前台运行?目前我已对大部分内容进行了注释,但是剩下的是
chmod+x/home/build/build.sh
DATE=$(DATE+%Y-%m-%d)
TARGET=“build-$DATE.tar.gz”)
然后我的sshpass命令如果我使用scp而不是sftp,我至少会得到一个主机密钥验证失败
#!/bin/bash
echo "adding host to known host"
mkdir -p ~/.ssh
touch ~/.ssh/known_hosts 
ssh-keyscan sftp >> ~/.ssh/known_hosts 
echo "run command on remote server"

sshpass -p pass sftp foo@sftp  << EOF
    ls
    pwd
EO
version: '3'
services:
  sftp-client:
      image: ssh-pass
      depends_on:
        - sftp

  sftp:
    image: atmoz/sftp
    ports:
        - "2222:22"
    command: foo:pass:1001