【问题标题】:sshpass not executing in bash scriptsshpass 未在 bash 脚本中执行
【发布时间】:2020-03-16 23:13:27
【问题描述】:

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

RUN apk app --update bash openssh sshpass

CMD ["bin/sh", "/home/build/build.sh"]

我的 dockerfile 是由这个命令运行的

docker run --rm -it -v $(pwd):/home <image-name>

和我的 bash 脚本中的所有命令,在已安装的卷中执行。这些命令的范围从 npm 安装到使用 tar 压缩文件,我想 SFTP 那个 tar.gz 文件。

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

sshpass -p <password> sftp -P <port> username@host << EOF
    <command>
    <command>
EOF

但是 sshpass 命令永远不会执行。我已经通过将 /bin/sh 附加到它并尝试它来测试我的 docker run 命令,它也没有运行。 SFTP 命令本身就可以。

当我说它从未被执行时,我没有收到错误或任何东西。

【问题讨论】:

  • show build.sh,在此命令之前是否有任何进程正在运行并且该进程在前台运行?
  • 目前我已将大部分内容都注释掉了,但剩下的内容是 chmod +x /home/build/build.sh DATE=$(date +%Y-%m-%d) TARGET="build-$DATE.tar.gz") 然后是我的 sshpass 命令
  • 如果我使用 scp 而不是 sftp 我至少会得到主机密钥验证失败

标签: bash shell docker sftp sshpass


【解决方案1】:

两个可能的原因

  • 你的apk命令错误,应该是RUN apk add --update bash openssh sshpass,但我认为是错字

  • 似乎缺少已知主机条目,您应该检查日志 `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 build -t ssh-pass .

最后,用于测试上述内容的 docker-compose

version: '3'
services:
  sftp-client:
      image: ssh-pass
      depends_on:
        - sftp

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

这样您就可以使用docker-compose up 连接sftp 容器

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2017-03-08
    • 2012-06-24
    • 2023-03-24
    相关资源
    最近更新 更多