Har*_*nda 6 ssh containers scp docker
我使用 alpine 映像创建了两个名为 server 和 client 的 docker 容器,并且我正在运行这两个容器。然后我在两个容器中都安装了apk add openssh和apk add openrc。使用rc-service sshd start我已经启动了 ssh 服务。现在,我想使用scp.
从服务器容器我输入:
scp myfile.txt client@172.17.0.3:/location_of_the_folder
Run Code Online (Sandbox Code Playgroud)
它要求输入客户端容器的密码。我能做什么?docker 容器的默认密码是什么?
我尝试了 3 个选项,如下所示:
docker cp从服务器容器到主机,然后主机到客户端容器。ssh-keygen在服务器容器中使用并将id_rsa.pub
密钥手动复制到客户端容器/root/.ssh目录,它可以工作。我不想使用选项 1 和选项 2。我应该使用 shell 脚本对选项 3 做什么?我想自动化这件事。我可以手动完成,但我们可以使用 shell 脚本通过自动化来完成,将一些文本从一个容器复制到另一个容器吗?
如果它是本地 docker 容器,请使用docker cp ,如下所述:
docker cp {container_name}:{file_path} {target_file_path OR target_dir_ended_with_slash}
但如果您确实需要ssh(例如,当容器在远程主机中运行时),请尝试以下步骤:
1.确保使用来自主机的 ssh 端口 22 重定向来运行容器,例如docker run -p 8022:22 ...
然后在容器内:
2. 安装sshd:sudo apt update && sudo apt install -y openssh-server
3.创建sshd目录:mkdir /var/run/sshd
4.为当前用户 添加密码(“root”用户默认没有密码):passwd
5.在sshd_config中设置PermitRootLogin yes:sudo sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
6.您可能还需要:sudo sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
7.并且:sudo sh -c 'echo "export VISIBLE=now" >> /etc/profile'
8. 重启sshd服务:sudo service ssh restart
然后您应该能够使用 SSH 连接,并使用 SCP 传输文件。
如果您收到“端口 22:连接被拒绝”,请尝试以下任一解决方法:
docker exec --privileged -ti container_name bashsudo apt-get install -y ufw && sudo ufw allow 22