3

CopSSHがセットアップされたWindowsServer2008マシン(iis7)があります。これに接続するために、Mercurial 1.5.1(およびTortoiseHg)がインストールされたWindows7マシンがあります。

非標準のsshポートと.ppkファイルを使用してPuTTYを使用してサーバーに接続できます。したがって、サーバーをSSHで接続できることはわかっています。

次に、CLIを使用してhg clone経由で接続し、プライベートリポジトリを取得したいと思いました。Mercurial.iniファイルにsshを設定する必要があることを他の場所で確認したので、mercurial.iniには次の行があります。ssh = plink.exe -ssh -C -l username -P #### -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk"
注:
usernamecopSSHを介して設定したユーザー名が入力されています。
####copSSH用に定義した非標準のsshポートで埋められます。

コマンドを実行しようとしましたが、次のhg clone ssh://inthom.comエラーが発生します。
remote: bash: inthom.com: command not found
abort: no suitable response from remote hg!

hgまたはplinkがホスト名を解析して、inthom.comがssh先のサーバーではなくコマンドであると見なすように見えます。それは本当に奇妙です。

次に、plinkを使用して接続しようとするとplink -P #### ssh://inthom.com、ユーザー名と次のパスワードの入力を求められます。両方を入力すると、次のエラーが発生します。
bash: ssh://inthom.com: No such file or directory

そのため、plinkがホスト名を正しく解析していないように見えます。

空のssh://フィールドを使用してhg cloneを呼び出す方法を理解しようとしばらくいじくり回しましたが、最終的に、このコマンドを使用してサーバーにアクセスし、inthom.comサーバーにテストリポジトリのクローンを作成できることがわかりました。
hg clone ssh://!/Repos/test

!は、ホスト名を空白のままにして、クローンを作成するリポジトリフォルダーを指定することを目的とした文字です。

私が本当に理解していないのは、plinkがどのサーバーにSSH接続するかをどのように知っているかということです。私のmercurial.iniもコマンドもサーバーを指定していません。hg clone私が見た例のどれにも!特徴がありません。それらはすべて意味のあるアドレスを使用するため、クローンを作成するsshを介して任意のリポジトリに接続できます。

私の唯一の推測では、PuTTYを使用してSSHで接続した最後のサーバーがデフォルトになっていますが、別のサーバーにSSHで接続し、plinkを使用してアクセスしようとしましたが、plinkはデフォルトでinthom.comになります( -v arg to plink)。そのため、plinkがこのサーバー値を取得する方法については途方に暮れています。

「楽しい」ために、TortoiseHgを使用してみssh://!/Repos/testましたが、ソースとして使用する場合にのみリポジトリのクローンを作成できます。

これで、plinkがホスト名を正しく解析しないため、username @ inthom.com:####のようなホスト名ではなく、mercurial.iniファイルでポート番号とユーザー名を指定する必要があったことがわかります。あなたが期待するだろう。これを最初に理解しようとすると、ホストに到達できないというエラーが発生するため、私は非常識になりました。

私の質問は、ssh://username@inthom.com:#### / Repos / testがコピーするユーザー名、ホスト名、ポート番号、およびリポジトリとして正しく解析されるようにセットアップを構成するにはどうすればよいですか?使用しているplinkのバージョンに問題がありますか、それとも設定が混乱している可能性がありますか?それがplinkのせいである場合、私が使用できる代替ツールはありますか?

この同じリポジトリに接続するように友人を設定しようとしているので、この!ビジネスではなく、クリーンなソリューションが必要です。特に、plinkがこのデフォルトのサーバーを取得する方法がわからない場合は、彼がinthom.comに正しくアクセスできるかどうかさえわかりません。

PS。この段階に到達するためにも、さまざまなチュートリアルを使用する必要がありました。したがって、私はまだサーバーに変更をプッシュしようとはしていません。うまくいけば、これを理解してから、リポジトリに変更をプッシュしてみることができます。

4

3 に答える 3

5

私は遅れていることを知っていますが、今は決してそうではありません。OK, so... Mercurial SSH に接続するためのコマンド

ssh = plink.exe -ssh -C -l ユーザー名 -P #### -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk"

は完全に問題ありませんが、問題は Plink にあります。

Plink は、名前にスペースが含まれるフォルダーに問題があります。だから、問題は

「C:/Program Files/PuTTY/Key Files/KyleKey.ppk」

次の 2 つのオプションがあります。

  1. この「KyleKey.ppk」ファイルを名前にスペースを含まないパスに移動できます。たとえば、このファイルを「C:\」または「D:\Path\Without\Space\In\Name」に移動できます。

  2. Windows の短いパス名を使用できます。たとえば、私は

    ssh = "C:\Progra~2\Plink\Plink.exe" -ssh -i "C:\Progra~2\PuTTYgen\hrle.ppk"

    私の「Mercurial.ini」で。

    「C:\Progra~2」は「C:\Program Files (x86)」です。

SSH 秘密鍵がパスワードで保護されていると、Plink がハングします。

また、Plink を TortoiseHg や MercurialEclipse などの他の GUI ツールと組み合わせて使用​​する前に、このサーバーを追加してサーバー リストを確認する必要があります。そうしないと、コマンドラインではなく TortoiseHg を使用しているため、Plink はハングアップして応答を待つことができません。AccessingSshRepositoriesFromWindowsでこのサブジェットの詳細を確認してください。

于 2010-06-08T20:23:42.867 に答える
1

plink では、ssh:// プロトコル識別子を使用する必要はありません。{user}@{host}:{path} 形式を使用するだけで問題なく動作します。

例:

plink -ssh -C -l {ユーザー名} -pw {パス} -P 22 -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk" inthom.com:/Repos/test

{username} をユーザーに置き換え、{pass} もパスワードに置き換えます。

于 2010-05-11T03:27:37.743 に答える
1

よ、私は同じ問題を抱えていました。私のセットアップの問題点は、plink が私が提供していたものではなく、パテに設定されたデフォルトのサーバーを使用していたことです。パテを開いてデフォルトサーバーを削除してから保存する必要がありました。サーバーなしで plink を使用してみてください。コマンドが成功すると、デフォルトのサーバーが作成されます。

于 2010-06-04T16:56:20.197 に答える