58

ssh の使用時にパスワードの入力を求めるプロンプトが表示されないため、ssh キーは間違いなく正しく設定されています。ただし、capistrano は .NET でデプロイするときにパスワードを要求しますcap deploycap deploy:setup奇妙なことに、セットアップ時にパスワードを要求されません。パスワードプロンプトがなくても、展開サイクルが非常にスムーズになります.

詳細: Sinatra アプリを Dreamhost 共有アカウント (Passenger を使用) にデプロイしています。私はずっと前に行うためのチュートリアルに従っていましたが、当時は完全に機能していました。それ以来、何かが壊れました。カピストラーノ (2.5.9) と git バージョン 1.6.1.1 を使用しています。これが私のCapfileです:

load 'deploy' if respond_to?(:namespace) # cap2 differentiator

set :user, 'ehsanul'
set :domain, 'jellly.com'

default_run_options[:pty] = true

# the rest should be good
set :repository,  "ehsanul@jellly.com:git/jellly.git"
set :deploy_to, "/home/ehsanul/jellly.com"
set :deploy_via, :remote_cache
set :scm, 'git'
set :branch, 'deploy'
set :git_shallow_clone, 1
set :scm_verbose, true
set :use_sudo, false

server domain, :app, :web

namespace :deploy do
  task :migrate do
    run "cd #{current_path}; /usr/bin/rake migrate environment=production"
  end
  task :restart do
    run "touch #{current_path}/tmp/restart.txt"
  end
end

after "deploy", "deploy:migrate"

cap deployそして、パスワードプロンプトまでのI の場合の出力は次のとおりです。

$ cap deploy
  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    updating the cached checkout on all servers
    executing locally: "git ls-remote ehsanul@jellly.com:git/jellly.git deploy"
/usr/local/bin/git
  * executing "if [ -d /home/ehsanul/jellly.com/shared/cached-copy ]; then cd /home/ehsanul/jellly.com/shared/cached-copy && git fetch  origin && git reset  --hard ea744c77b0b939d5355ba2dc50ef1ec85f918d66 && git clean  -d -x -f; else git clone  --depth 1 ehsanul@jellly.com:git/jellly.git /home/ehsanul/jellly.com/shared/cached-copy && cd /home/ehsanul/jellly.com/shared/cached-copy && git checkout  -b deploy ea744c77b0b939d5355ba2dc50ef1ec85f918d66; fi"
    servers: ["jellly.com"]
    [jellly.com] executing command
 ** [jellly.com :: out] ehsanul@jellly.com's password:
Password:
 ** [jellly.com :: out]
 ** [jellly.com :: out] remote: Counting objects: 7, done.
remote: Compressing objects: 100% (4/4), done.

何が壊れる可能性がありますか?

4

7 に答える 7

56

パスワード プロンプトが表示されるのは、デプロイ先のサーバーが git サーバーに接続しており、認証が必要であるためです。ローカル マシン (デプロイ元) に有効な ssh キーが既にあるため、Capfile で転送を有効にして、そのキーを使用します。

set :ssh_options, {:forward_agent => true}

これにより、展開サーバーが git サーバーに接続しようとするときに、ローカル マシンからの認証が転送されます。

これは、展開サーバーに秘密鍵を配置するよりもはるかに優先されます!

サーバーが自分自身に ssh しているときにパスワードプロンプトを回避する別の方法は、capistrano にそうしないように指示することです。Daniel Quimper のcapistrano-site5 github リポジトリの「readme」セクションのおかげで、次の点に注意してください。

set :deploy_via, :copy

明らかに、これは、アプリと git リポジトリの両方が同じホストでホストされている場合に機能します。しかし、私たちの何人かはそうしていると思います:)

于 2010-09-04T20:34:13.247 に答える
18

私は同じ問題を抱えていました。

この行は機能しませんでした:

set :ssh_options, {:forward_agent => true}

次に、Dreamhost wikiで言及されたものを実行しました

[local ~]$ eval `ssh-agent`
[local ~]$ ssh-add ~/.ssh/yourpublickey  # omit path if using default keyname

そして、パスワードなしでデプロイできるようになりました。

于 2011-02-20T03:07:31.373 に答える
3

ログには、SSH 経由で jellly.com にログインした後にパスワードの入力を求められたことが示されているため、実際の git 更新ではパスワードの入力が求められているようです。

この場合は匿名でアクセスできますが、リポジトリの設定で git ユーザーが指定されているためだと思います。

匿名の git アカウントを作成し、リポジトリ行を次のように変更する必要があります。

set :repository,  "git@jellly.com:git/jellly.git"

別の方法として、SSH キーを本番サーバーに配置することもできますが、これは役に立ちません。また、最初の SSH 接続を介して認証要求を転送するように SSH を構成できる場合もあります。ただし、デプロイ用の匿名の読み取り専用ソース管理の方がおそらく簡単です。

于 2010-07-17T02:31:11.317 に答える
0

社内ネットワークに直接接続したり、VPN 経由で接続したりする Windows ワークステーション (ポータブル) を使用している場合、パスワードを要求する cap リモート タスクを実行すると、一貫性のない動作が発生することがあります。

私の状況では、会社にはログイン スクリプトがあり、会社の LAN に既に接続されているときにログインすると実行され、HOME ディレクトリがネットワーク共有の場所に設定されます。キャッシュされた資格情報からログインしてから VPN を使用すると、ログイン スクリプトによってホーム ディレクトリが設定されません。秘密鍵を格納する .ssh ディレクトリは、これらの場所の 1 つだけにある場合があります。

この状況での簡単な修正は、.ssh ディレクトリを、ある HOME からないものにコピーすることです。

于 2013-02-19T19:35:19.987 に答える