I am trying to get my ssh public key from my windows client to ubuntu host, but I have no idea how to. I tried to find the authorized_keys file, but had zero success. ssh-copy-id command did not work from windows. I generated the public/private key pair in PuTTYgen. I am using OpenSSH on the Ubuntu host. Any ideas on what to do?

5 Answers 5


Any ideas on what to do?

1. EDIT Download cmder or use your favorite console emulator. Move your public key (id_rsa.pub) and your private key (id_rsa) to C:\Users\yourUserName\.ssh\ create the .ssh folder if needed.

2. On your windows host via cmder:

cp C:\Users\yourUserName\.ssh\id_rsa.pub C:\Users\yourUserName\authorized_keys

3. On your ubuntu host:

service ssh status Start sshd if necessary

mkdir ~/.ssh/ (if it doesn't already exist)

4. On your Windows host via cmder:

cd C:\Users\yourUserName\

scp authorized_keys login-id@ubuntu-Host-Ip:~/.ssh

5. On your Ubuntu host:

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

6. On your Windows host via cmder:

Test if you can ssh into your ubuntu host without login/pw auth. If yes:

rm C:\Users\yourUserName\authorized_keys

(you might encounter difficulties running your ssh-agent on windows, write a comment if so)

  • Are you sure that PuTTYgen has generated a C:\Users\yourUserName\.ssh\id_rsa.pub? Aug 22, 2017 at 8:17

Do this on your Windows

  1. Give default values without passphrase, just press enter for all

     ssh-keygen -t rsa
  2. If the authorized_keys file is not there in target Linux machine else just copy the Windows ~/.ssh/id_rsa.pub content to authorized_keys file in target machine

     scp ~/.ssh/id_rsa.pub [linux_user]@[linux_IP/linux_hostname]:~/.ssh/authorized_keys

That's it!!!

  • Works perfectly, but careful since this will overwrite the existing "authorized_key"-file. If you want to use multiple keys you can just create multiple files named "authorized_key2", "authorized_key3" etc.
    – Lew Pérez
    Mar 29, 2019 at 15:46

ssh-copy-id is missing from windows but it easy to create one!

  • open powershell and type:
notepad $profile
  • You’ll either open the existing Profile.ps1 file, or be prompted to create a new one. At the notepad paste the following function:
function ssh-copy-id([string]$sshHost)
    cat ~/.ssh/id_rsa.pub | ssh "$sshHost" "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
  • Close the notepad and save.

  • Finally open a new powershell window and the ssh-copy-id will works as at linux. Example:

ssh-copy-id user@host

Assuming your ssh agent is running, just run this from Ubuntu.

ssh-add -L >> ~/.ssh/authorized_keys

Another way to send your public key from your Windows to your Linux machine is command in your powershell:

cat ~/.ssh/id_rsa.pub | ssh user@host "cat >> ~/.ssh/authorized_keys"

That should be a one-stop shop for it to work to make it a passwordless entry.

  • This is no different from the other PowerShell answer ...
    – schroeder
    Jun 20 at 8:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.