GitサーバーBashとSSH

GitサーバーBashとSSH

Ubuntu 10.04 LTSを実行しているLinode VPSでSSH経由でGitを使用したいと思います。

実際にはSSHキーがすでに設定されていることを考慮すると、指示は十分に簡単に見えました。

私がしなければならないのは、ローカルストアにサーバーに送信するように指示することだけです。

ssh://[email protected]:22/~/mygits/proj1.git

問題は、git push origin masterこれを行うときにネットワークアクティビティがなく、エラーもなく動作が停止し、数分後にCtrl-Cを押して終了することです。問題を診断するために昨日誰かを送った。だから私はサーバーで新しいユーザーを設定し、violaにコピーしてプッシュしようとしましたが、うまくいきmatt2ました。authorized_keysmatt2[email protected]:22

マットとマット2の違いは何ですか? Mattには、sshエージェントが実行されていることを確認するために、独自の.bash_profileにこの機能があります。 (私はこの機能がたくさん必要です。)

# Start/Reuse SSH Agent - restart or re-use an existing agent
SSH_AGENT_CACHE=/tmp/ssh_agent_eval_`whoami`
if [ -s "${SSH_AGENT_CACHE}" ]
then
    echo "Reusing existing ssh-agent"
    eval `cat "${SSH_AGENT_CACHE}"`
    # Check that agent still exists
    kill -0 "${SSH_AGENT_PID}" 2>-
    if [ $? -eq 1 ]
    then
        echo "ssh-agent pid ${SSH_AGENT_PID} no longer running"
        # Looks like the SSH-Agent has died, it'll be restarted below
        rm -f "${SSH_AGENT_CACHE}"
    fi
fi

if [ ! -f "${SSH_AGENT_CACHE}" ]
then
    echo "Starting new ssh-agent"
    touch "${SSH_AGENT_CACHE}"
    chmod 600 "${SSH_AGENT_CACHE}"
    ssh-agent >> "${SSH_AGENT_CACHE}"
    chmod 400 "${SSH_AGENT_CACHE}"
    eval `cat "${SSH_AGENT_CACHE}"`
    ssh-add

.bash_profileそのため、SSHを介してgitを操作することと競合があるようです。回避策に関する提案はありますか?

2つのユーザーアカウントを使用したくなく、自分のアカウントを維持したいです。.bash_profile..bash_profileを編集して機能をラップすることができれば幸いですが、そのようなif [ $connectingWith != "git-client" ]ものが存在するかどうか疑問です。

アイデア?

答え1

問題はあなたのエコーだと確信しています.bashrc.bashrc端末で実行されていないときは何も印刷しないでください。自動化のためにsshを使用するプログラム(rsync、gitなど)がクラッシュする可能性があります。

実際に.bashrc端末で実行されていない場合は、何もしてはいけません。ファイルの先頭にこれを置きます。

if ! [ -t 1 ]; then return; fi

この.bashrcファイルは対話型シェル用です。対話型であるかどうかにかかわらず、すべてのrshログインとsshログインに対してこのファイルをロードするbashには奇妙なことがあります。これは、非対話型SSHセッションの環境変数を設定できるため便利ですが、これは対話型設定(プロンプト、キーバインディング、エイリアスなど)とはまったく異なります。一般的に言えば、.bashrc関係のない2つの部分にすることができます。

if [ -t 1 ]; then
  # Stuff for interactive bash shells (defined here as shells running in a terminal).
  # Prompt, key bindings, aliases, terminal settings, …
  # It's ok to print things to the terminal here (e.g. to set the terminal title).
else
  # Environment variables for ssh sessions.
  # Do not print anything here.
fi

注:対話型SSHログインの場合、bashがログインシェルの場合は読み込まれます.bash_profileが読み取られません。ソースからソースコードを取得する.bashrc必要があります(シェルが対話型の場合)。.bashrc.bash_profile

答え2

無視してください。 .bashrcの何かが問題を引き起こしています。 SSHを実行しても実行されないため、この内容は表示されません。

関連情報