sshpass未在bash脚本中执行
我有一个dockerfile:(这些是相关的命令) 通过此命令运行的dockerfilesshpass未在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
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