多服务器部署:询问每台服务器的 ssh 密码

2023-12-02

我正在设置 Capifony(Capistrano for symfony),但在测试多服务器部署时,我遇到了 ssh 密码问题。

这里有一些版本:

daniel@fiji:~$ ruby --version
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]

daniel@fiji:~$ cap --version
Capistrano v2.9.0

daniel@fiji:~$ uname -a
Linux fiji 3.0.0-13-generic-pae #22-Ubuntu SMP Wed Nov 2 15:17:35 UTC 2011 i686 i686 i386 GNU/Linux

以及来自deploy.rb的一些配置:

set :domain, "mydomain"
...
set :user, "sshuser"
set :password, "sshpassword"
...
role :web, domain
role :app, domain
...

部署到单个服务器效果很好,无需输入密码。一切都很好。但是,如果我尝试向配置中添加更多服务器(我需要部署到 6 到 9 台机器),配置如下:

...
set :user, "sshuser"
set :password, "sshpassword"
role :web, "ipaddr1", "ipaddr2"
role :app, "ipaddr1", "ipaddr2"
...

Capistrano 开始询问我列出的每个服务器的 ssh 密码,即使它的设置与以前一样......此配置有什么问题?输入密码可以让该过程继续并且一切正常,但我想避免每次都输入密码。

谢谢 丹尼尔


我不明白为什么卡皮斯特拉诺一直要求你输入密码。然而,解决此问题的一种方法是使用公钥身份验证,capistrano wiki 中也建议使用公钥身份验证。 (看本教程有关如何设置的示例)

简而言之:

  1. 您使用生成密钥ssh-keygen -t rsa -C "youremail"
  2. 您将公钥复制到远程主机scp -p .ssh/id_rsa.pub remoteuser@remotehost:
  3. 您将公钥添加到授权密钥文件中在服务器上: cat id_rsa.pub >> ~/.ssh/authorized_keys。 (您可能需要创建 .ssh 目录)

之后,您只需要输入密码一次,并且不需要将密码硬编码到deploy.rb 文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多服务器部署:询问每台服务器的 ssh 密码 的相关文章

  • 如何配置 Ansible 跳过两个堡垒主机?

    我想编写一个 Ansible 剧本 使用 Ansible 2 7 5 它将在到达目标服务器之前跳过两个主机来执行诸如安装 docker 和 python 等操作 我能够让 Ansible 通过一台主机跳转到server1通过将其添加到我的h
  • gitlab runner ssh私钥644文件权限错误

    运行 gitlab ci cd 管道时 ssh 给出 0644 badpermission 错误 变量作为文件类型存储在 gitlab 的 settings gt variable 部分中 gitlab ci yml 文件如下所示 stag
  • 无法通过 SSH 连接到 EC2 实例

    因此 我从网上启动了我的实例 下载了密钥对并安装了它 大约一天的时间里一切都运行良好 然后我重新启动了计算机 但我无法再通过 SSH 连接到它 我尝试重新下载密钥对并重新安装它 但我不断收到 权限被拒绝 公钥 错误 这是详细的输出 我也尝试
  • Mac OS X 中 Bash 脚本中的 SFTP 命令

    我需要使用 SFTP 和 SSH 从 Mac 主机将文本文件传输到远程 PC freeSSH 这两个连接在本地网络中 那么有没有办法从 Bash 脚本内部运行 SFTP 命令 使用提供的用户名和密码 我已经尝试过一些脚本expect 但我没
  • 如何将命令作为参数传递给 ssh [重复]

    这个问题在这里已经有答案了 我的需要是让这个命令起作用 sshpass p XXXX ssh oStrictHostKeyChecking no email protected cdn cgi l email protection sudo
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • 连接到 OpenShift (Redhat Paas) mysql 实例

    我正在尝试将我的 C 应用程序与 openshift 数据库连接 但我得到了这个例外conn Open Eccezione gt MySql Data MySqlClient MySqlException 0x80004005 Unable
  • PHPStorm - 无效的后代文件名

    我正在尝试将 Windows 7 PC 上的本地 PHPStorm 项目与 Ubuntu 服务器同步 当我尝试任何类型的连接 例如 测试 SFTP 连接 时 它会失败并显示 Invalid descendent file name C np
  • 无法连接到 EC2 - ssh:连接到主机端口 22:连接被拒绝

    我目前在海外 尝试通过 ssh 连接到我的 EC2 实例 但收到错误ssh connect to host ec2 34 207 64 42 compute 1 amazonaws com port 22 Connection refuse
  • GitLab:无法将代码推送到服务器?

    我已经在 Ubuntu 服务器上安装了 GitLab 一切似乎都工作正常 除了我无法向服务器推送 拉取 克隆 当我按下时 我收到一般错误消息 fatal Could not read from remote repository Pleas
  • 如何使用ssh直接连接远程docker容器

    我想直接使用 ssh 连接到远程运行的 Docker 容器 通常我可以 ssh i privateKey user host docker ps which will list all running containers docker e
  • JSch:如何使用 ssh 密钥 ssh 到服务器

    我想从另一个 ssh 服务器后面 ssh 进入服务器 网关服务器需要用户名 密码 我可以做到这一点 我正在使用隧道进入下一台服务器 但这需要only一个 ssh 密钥 我已经通过 PuTTY 生成了密钥 因此它存在于我的用户名中 但我不确定
  • Ruby,通过 SSH 和 LOG 逐一运行 linux 命令

    我想用 Ruby 女巫 net ssh 编写代码 在远程 Linux 机器上一一运行命令并记录所有内容 在 Linux 机器上称为命令 stdout 和 stderr 所以我写函数 def rs ssh cmds cmds each do
  • 如何从远程 ssh 连接上运行的 tmux(复制模式)复制到本地剪贴板

    我通过 OS X 上的 VirtualBox 运行 Linux 我通过在无头状态下运行虚拟机 然后使用端口转发 sshing 到 Linux 机器来实现这一点 现在 无论复制到我的虚拟机上的剪贴板 我都可以粘贴到我的远程 ssh 会话上 但
  • Capistrano 编译资产错误 - 资产:预编译:非摘要?

    我的应用程序似乎部署正确 但出现此错误 executing cd home deploy tomahawk releases 20120208222225 bundle exec rake RAILS ENV production RAIL
  • 处理 sshj 中的“[HOST_KEY_NOT_VERIFIABLE] 无法使用指纹验证 `ssh-rsa` 主机密钥”

    我在 sshj 方面遇到了一个奇怪的问题 我正在使用 sshj v0 6 0 我需要某人的帮助 使用公钥进行身份验证在某些计算机上可以正常工作 但在其他计算机上则不能正常工作 并且我看到以下错误 我能看出的唯一区别是 有问题的 UNIX I
  • 通过 cron 进行 git 推送

    我正在尝试运行git push来自 cron 当我在 shell 上以交互方式执行命令时 一切顺利 从我的用户的 crontab 运行命令时 cron 会传递错误消息 Permission denied publickey 我认为这与查找或
  • 如何通过主机从外部 SSH 到 VirtualBox 来宾? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个在 Windows 7 计算机上运行的 Ubuntu 虚拟机 如何设置才能通过 SSH 从外部访问 Web 服务器 我找到了步骤
  • 如何通过 SSH 启动进程,使其保持运行?

    我有三个文件 Monitor sh 它启动 python 脚本 sudo python webCheck sudo python apiCheck 以及其他的 webCheck 和 apiCheck 它应该在我关闭终端后在后台运行 它无限循
  • Renci ssh.net - 连接时从表单创建控制台屏幕

    我想创建 我认为它是一个控制台 屏幕来输入并在 renci ssh net 连接之后 或期间 查看输出 我目前有一个 form1 它收集连接信息 然后您按下按钮通过 backgroundworker1 进行连接 我想我需要一个 form2

随机推荐