Different SSH locations for git? - windows

I recently reinstalled Windows on my PC. However the new SSH location on my PC is different because the username is different. When I try to sync git, it still looks for the previous ssh location.
My question is simply why is it looking for the previous location?
EDIT
I forgot to mention that I copied all my repositories and .ssh folder over.

Git will always look by default for ssh keys in %USERPROFILE%\.ssh\id_rsa(.pub).
Warning, with Git 2.19+, you need to add the -m PEM option to ssh-keygen:
ssh-keygen -t rsa -m PEM -P ""
The only way Git would look elsewhere is if you have restored your %USERPROFILE%\.ssh\config file, in which you could have set a specific path for a private key.

all it's looking for is the private key. since you reinstalled Windows, you would have lost you previous key. only option you have is to generate a new key and configure it's corresponding public key on git again.
P.S: you are incorrect in assuming that it's due to change in location or that git's even looking for your key at a certain location.

Related

Can I manually select a .ssh default folder on windows?

So, I followed this to configure my SSH -Setting up SSH keys for Bitbucket on Windows- and it works as expected.
For a reason out of knowledge, control and understanding.... The %HOMEDRIVE% on my computer is set to Q (a network drive), resulting on GIT storing and looking for my ssh keys on Q:\Users\MyUser\.ssh.
I can tell git to create the keys on C:\Users\MyUser\.ssh (or just copy them from Q to C). But when I want to do a git pull, git looks for my keys on Q instead of C, and obviously fails to connect.
Any idea on how to tell git to always look for SSH keys and configurations on a specific folder?
Thanks,
R.
p.d. My %HOMEPATH% is propperly configured... if i could at least tell git to use the %HOMEPATH% instead of %HOMEDRIVE%... that could probably be a fix too.
--UPDATE--
I created a config file, that redirects ssh.exe from Q to C
Host MyHost
HostName MyIP
Port MyPort
StrictHostKeyChecking no
UserKnownHostsFile /C/Users/MyUser/.ssh/known_hosts
IdentityFile /C/Users/MyUser/.ssh/id_rsa
So, being able to specify a location for the config file would also help.
So far I solved my issue (in a way i don't really like)... But my solution doesn't answer my question.
I added a variable to my user variables called HOME and set it to C:\Users\MyUser.
Basically what rolyat suggested in this thread change-the-default-location-for-git-bash
I don't know the reason why my organization configures %HOMEDRIVE% to Q and I don't know if my variable will later affect me accessing network resources or receiving windows updates from my organization...
At least this way i am not dependent on the network drive anymore.

How to change the place where git bash should look for known_hosts in windows

I normally use Linux and everything goes very well. :-)
But I have a machine which runs with Windows 7. :-\
When I try to connect to a server using Git Bash I receive following message:
The authenticity of host '144.76.35.106 (144.76.35.106)' can't be established.
ECDSA key fingerprint is 50:50:10:f7:40:50:b8:3a:20:c5:20:20:00:a0:d8:70.
Are you sure you want to continue connecting (yes/no)?
Normally I should only type yes and hit enter. But we are talking about Windows... ;-)
The problem is that in this special case the folder ~/.ssh is not writeable and I'm unable to change rights. (Why is that so is related to the security philosophy of the company. Unfortunately I have no influence here).
So I would like to know if there's any chance to change this: So when I type yes and hit enter the file known_hosts is saved in another place and most important, that the file is read next time when I access the server once again.
In other words: Where can I configure that Git look for known_hosts in another place than ~/.ssh using Windows?
Many thanks in advance!!!
The problem is that in this special case the folder ~/.ssh is not writeable and I'm unable to change rights.
Here is simply the value referenced by the environment variable HOME.
Check its value with echo $HOME in your bash session.
HOME should be set by default to %USERPROFILE%, but you can set it to any other folder of your choice, where you know you have the right to write.

How to modify ~/.ssh folder & files in windows?

I feel like I am missing some fundamental concept as to how the .ssh directory works in windows. I have had no issues when working in OSX/Linux like I am having now. My end goal is simply to move my existing ssh key into the default ~/.ssh directory, and update the config if I so choose (you know, normal ssh key related tasks).
However, any time I have tried to move my existing SSH key over to the ~/.ssh directory, or open it, or even create a config file I just get the following error (in either gitbash, puttygen, etc...):
Puttygen (saving the key to disk):
Overwrite existing file C:\Users\me\.ssh?
or in gitbash (attempting to do anything, including just create the config file):
touch: creating `/c/Users/me/.ssh/config': No such file or directory
cd ~/.ssh
sh.exe": cd: /c/Users/me/.ssh: Not a directory
What am I missing/not understanding?
Kind Regards,
u353
This answer for Windows environment:
At the beginning, Windows didn't have .ssh folder.
Create an ssh key file pair like this (ssh-keygen is nowadays a native Windows command, that comes with Windows 10+11):
ssh-keygen -t rsa -b 4096 -C "your_email#example.com" (must run your terminal as administrator).
Your is_rsa and id_rsa.pub files will be placed under C:\Users\your_username\
So, you need to create the folder C:\Users\your_username\.ssh then copy your ssh files (the extensionless private key and the public key ending in .pub) to there.
You also have to create file C:\Users\your_username\.ssh\config and edit it for the first time.
Next ssh will be placed in the .ssh folder automatically.
Note: ~/ under Linux is the equivalent of C:\Users\your_username\ on Windows
I have created and regularly use a ".ssh" directory on Windows 7; as mentioned in the above comments, Windows Explorer doesn't support them, or more specifically, the error-checking in Windows Explorer does not allow you to give a file name that starts with a period. That same restriction does not exist in the command prompt or powershell.
Also, as mentioned above, it appears you have a file called ".ssh" in your home directory, which must be removed before you can create a folder named ".ssh".
Once such a folder exists, you can open it and change/create files in it using Windows Explorer; it just won't let you name a folder/file ".ssh" directly.
Gitbash should directly allow you to run "rm .ssh" and "mkdir .ssh", at which point everything else should work.
It is quite possible to add a . in the beginning of a directories name using File Explorer, it can be easily done by adding a . at the end of the directory name as well. For example:
To create a directory named .shh, just add the name as .ssh. and it will be created without any error.
And as #Bryson mentioned, this can be done from the cli as well, without appending a . at the end.
Coming to this in 2018, given that on Windows 10 you have the Optional Feature OpenSSH client installed it appears that on Windows a .ssh folder is created for you under C:\Users\<your_username>\.ssh
This is a feature that allows you to use PowerShell to SSH into remote hosts, and seems to be pretty similar in usage to the Linux/Unix equivalent. It was already installed for me when I setup my computer, but you can read the following for how to verify it's installed or install it:
You can check if it's installed by going to Settings -> Manage Optional Features, and then checking if you see OpenSSH in the list. If it is then your .ssh folder is probably in your home directory C:\Users\<your_username>\.ssh. If you need to install it then click "Add a feature", locate OpenSSH Client, click it and click install to install it.
Use git bash on windows
go to home directory as
$ cd
then to check .ssh folder on home directory use
$ ls -A
you will be able to see a ./ssh folder there
$ cd ./ssh
$ ls
you will be able to see the config files if exists
To transfer any key-pair or any files to this folder use below command
First to that directory in which you already have key-pair
$ cp name_of_key-pair_file.pem ~/.ssh/
First of all, if you want to generate SSH files, all you need to do is run this command:
ssh-keygen
Once you did, .ssh folder will be generated in this path:
C:\Users\your_username\
For checking what files are in .ssh folder you can easily run this command:
ls ~/.ssh
with this above command, you can see all your ssh files which would be like this:
id_rsa id-rsa.pub
Please note that:
id_rsa : It's a private file and
id-rsa.pub : It's a public file
so, if you like to see inside of that file or whatever you like just type this command :
cat ~/.ssh/id_rsa.pub
To solve this problem I used git batsh console
This isn't supported as Windows doesn't recognize dot files as directories.

'ssh-keygen' is not recognized as an internal or external command

I run git push -u origin master
It tells me that "Permission denied (public key) fatal: The remote end hung up unexpectedly"
Then I looked up on the internet and found that I had to generate an ssh key for my account on GitHub. However, upon doing so, when I tried to do ssh-keygen -t rsa "email#youremail.com" it simply said ssh-keygen is not recognized. I tried doing mkdir C:\ssh but that didn't work. If it helps I'm using Ruby Rails and I'm on a Windows computer. Could anyone help me?
2012:
ssh-keygen.exe is part of msysgit:
C:\path\to\msysgit1.7.11\bin\ssh-keygen.exe
if your %PATH% includes C:\path\to\msysgit1.7.11\bin\, you will have ssh-keygen.
Update 2015:
ssh-keygen.exe is part of Git For Windows, whose releases include PortableGit-2.4.3.1-2nd-release-candidate-64-bit.7z
c:\path\to\PortableGit-2.4.3.1-2nd-release-candidate-64-bit\usr\bin\ssh-keygen.exe
That means the %PATH% must include c:\path\to\PortableGit-2.4.3.1-2nd-release-candidate-64-bit\usr\bin (without the ssh-keygen.exe)
As I explained before, Git for Windows will soon phase out msysgit.
I detailed in "Why is it that if you download Git 2.0 from the net, you always get a 1.9.4 installer package?" how this new version is based on the more recent msys2 project.
I just had this issue and thought I'd share what I thought was an easier way around this.
Open git-bash and run the same command with the addition of -C since you're commenting in your email address: ssh-keygen -t rsa -C "email#youremail.com" command. That's it.
git-bash should have been installed when you installed git. If you can't find it you can check C:\Program Files\Git\Git Bash
The first time I did this it failed to create the .ssh folder for me so I had to open a standard Command Prompt and mkdir C:\Users\yourusername\.ssh
I followed below in windows (With Git for Windows installed)
Run "Git Gui" (Start --> Git --> Git Gui)
Click Help and then Show SSH Key
Click Generate Key if you do not have one already
Note:- this creates the key files under your personal profile folder C:\Users\YourUserID\.ssh\
No need to add anything to environmental variables! Just open up git bash and perform command the ssh-keygen in there.
Link to download git bash here
I found an easy solution to fix this :
In the command prompt, go to your git\bin directory,
and then execute your commands from here
If you have installed Git, and is installed at C:\Program Files, follow as below
Go to "C:\Program Files\Git"
Run git-bash.exe, this opens a new window
In the new bash window, run "ssh-keygen -t rsa -C""
It prompts for file in which to save key, dont input any value - just press enter
Same for passphrase (twice), just press enter
id_rsa and id_rsa.pub will be generated in your home folder under .ssh
Just go to heroku.bat and add:
#SET PATH="D:\Program Files (x86)\Git\bin";%PATH% after #SET PATH=%HEROKU_RUBY%;%PATH%
in my case it's in D:\Program Files (x86)\Git\bin, change it to the path you've installed Git to. (i just left it with my path so it will be clearer on how to write this)
I think you can add the location of the file ssh-keygen.exe in the PATH environment variable. Follow the steps: Go to My Computer->Right click->Properties->Advanced System Settings->Click Environmental Variables. Now click PATH and then click EDIT. In the variable value field, go to the end and append ';C:\path\to\msysgit1.7.11\bin\ssh-keygen.exe' (without quotes)
don't do anything just type in your command prompt
C:\> sh
then you got like this
sh-4.4$
# type here
ssh-4.4$ ssh-keygen -t rsa -b 4096 -C "example#example.com"
this should must work.
For windows you can add this:
SET PATH="C:\Program Files\Git\usr\bin";%PATH%
You probably should check this. Windows doesn't have that command built in.
I got it fixed by just adding ssh-keygen to my environment variables.
for those who does not choose BASH HERE option. type sh in cmd then they should have ssh-keygen.exe accessible
In my machine, ssh-keygen was available from powershell.

What's the difference between Github and Putty SSH key placement configurations?

The github instructions say to setup your SSH keys in ~/.ssh using the windows git bash program.
I have in the past used Putty to manage ssh keys.
What is the difference between the 2 setups?
This is for my own git server.
I know this is a pretty old question, but here's the answer:
Basically, PuTTY stores all its sessions in the Windows registry, rather than in a config file in a home folder, whereas the default git+ssh setup uses openSSH and it's style of key configuration (files that are typically stored in ~/.ssh, i.e., /home/<username>/.ssh).
In Windows, if you'd rather use PuTTY than openSSH, set an environment variable named GIT_SSH to C:\your\putty\folder\plink.exe. Then, you can reference any saved session in PuTTY by using a remote url of the form ssh://<session name>/<repository path>. This allows you to, for example, specify particular keys with each session, similarly to how you could use ~/.ssh/config to specify a particular key with the IdentityFile option.
Git uses an SSH program to deal with SSH accesses, basically the default one depending on your system (look at the GIT_SSH environment variable). So it's just to ease the configuration that they say to setup SSH keys in ~/.ssh. If you want to put SSH keys in another directory, just tell it by using ssh-add /path/to/your/key.

Resources