I have a Windows Server 2008 machine (iis7) that has CopSSH set up on it. To connect to it, I have a Windows 7 machine with Mercurial 1.5.1 (and TortoiseHg) installed.
I can connect to the server using PuTTY with a non-standard ssh port and a .ppk file just fine. So I know the server can be SSH'd into.
Next, I wanted to use the CLI to connect via hg
clone to get a private repo. I've seen elsewhere that you need to have ssh configured in your mercurial.ini file, so my mercurial.ini has a line: ssh = plink.exe -ssh -C -l username -P #### -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk"
Note:
username is filled in with the username I set up via copSSH.
#### is filled in with the non-standard ssh port I've defined for copSSH.
I try to do the command hg
clone ssh://inthom.com but I get this error:
remote: bash: inthom.com: command not found
abort: no suitable response from remote hg!
It looks like hg or plink parses the hostname such that it thinks that inthom.com is a command instead
of the server to ssh to. That's really odd.
Next, I tried to just use plink to connect by plink -P #### ssh://inthom.com, and I am then prompted for my username, and next password. I enter them both and then I get this error:
bash: ssh://inthom.com: No such file or directory
So now it looks like plink doesn't parse the hostname correctly.
I fiddled around for a while trying to figure out how to do call hg
clone with an empty ssh:// field and eventually figured out that this command allows me to reach the server and
clone a test repo on the inthom.com server:
hg
clone ssh://!/Repos/test
! is the character I've found that let's me leave the hostname blank, but specify the repo folder to
clone.
What I really don't understand is how plink knows what server to ssh to at all. neither my mercurial.ini nor the command specify a server. None
of the hg
clone examples I've seen have a ! character. They all use an address, which makes sense, so you can connect to any repo via ssh that you want to
clone.
My only guess is that it somehow defaults to the last server I used PuTTY to SSH to, but I SSH'd into another server, and then tried to use plink to get to it, but plink still defaults to inthom.com (verified with the -v arg to plink). So I am at a loss as to how plink gets this server value at all.
For "fun", I tried using TortoiseHg and can only
clone a repo when I use ssh://!/Repos/test as the Source.
Now, you can see that, since plink doesn't parse the hostname correctly, I had to specify the port number and username in the mercurial.ini file, instead
of in the hostname like
[email protected]:#### like you'd expect to. Trying to figure this out at first drove me insane, because I would get errors that the host couldn't be reached, which I knew shouldn't be the case.
My question is how can I configure my setup so that ssh://
[email protected]:####/Repos/test is parsed correctly as the username, hostname, port number, and repo to copy? Is it something wrong with the version
of plink that I'm using, or is there some setting I may have messed up? If it is plink's fault, is there an alternative tool I can use?
I'm going to try to get my friend set up to connect to this same repo, so I'd like to have a clean solution instead
of this ! business. Especially when I have no idea how plink gets this default server, so I'm not sure if he'd even be able to get to inthom.com correctly.
PS. I've had to use a ton
of different tutorials to even get to this stage. Therefore, I haven't tried pushing any changes to the server yet. Hopefully I'll get this figured out and then I can try pushing changes to the repo.