Last active
June 3, 2023 01:48
-
-
Save ceilfors/fb6908dc8ac96e8fc983 to your computer and use it in GitHub Desktop.
ssh-copy-id for Windows
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""ssh-copy-id for Windows. | |
Example usage: python ssh-copy-id.py ceilfors@my-remote-machine | |
This script is dependent on msysgit by default as it requires scp and ssh. | |
For convenience you can also try that comes http://bliker.github.io/cmder/. | |
""" | |
import argparse, os | |
from subprocess import call | |
def winToPosix(win): | |
"""Converts the specified windows path as a POSIX path in msysgit. | |
Example: | |
win: C:\\home\\user | |
posix: /c/home/user | |
""" | |
posix = win.replace('\\', '/') | |
return "/" + posix.replace(':', '', 1) | |
parser = argparse.ArgumentParser() | |
parser.add_argument("-i", "--identity_file", help="identity file, default to ~\\.ssh\\idrsa.pub", default=os.environ['HOME']+"\\.ssh\\id_rsa.pub") | |
parser.add_argument("-d", "--dry", help="run in the dry run mode and display the running commands.", action="store_true") | |
parser.add_argument("remote", metavar="user@machine") | |
args = parser.parse_args() | |
local_key = winToPosix(args.identity_file) | |
remote_key = "~/temp_id_rsa.pub" | |
# Copy the public key over to the remote temporarily | |
scp_command = "scp {} {}:{}".format(local_key, args.remote, remote_key) | |
print(scp_command) | |
if not args.dry: | |
call(scp_command) | |
# Append the temporary copied public key to authorized_key file and then remove the temporary public key | |
ssh_command = ("ssh {} " | |
"mkdir ~/.ssh;" | |
"touch ~/.ssh/authorized_keys;" | |
"cat {} >> ~/.ssh/authorized_keys;" | |
"rm {};").format(args.remote, remote_key, remote_key) | |
print(ssh_command) | |
if not args.dry: | |
call(ssh_command) |
nice snippet. Line 39 should change to mkdir -p xxx
i'd like to know how i could complie this code with the Cmd of windows.
Please could u write me down the command line.
Thanks
Any chance to add a custom port?
UPDATE: just did, see my fork ;)
@ferielboa: just copy this text and save it as ssh-copy-id.py. Then, from the folder where you saved it call python ssh-copy-id.py ceilfors@my-remote-machine. You can also add a custom port for the ssh/scp connection in my fork with the -p flag. It will ask you to login twice, once for the scp and once for the ssh connection.
Hi, can you please tell me with which version of python this script is compatible? I am trying to run it on win 10 python 3.8 but I get the following error
python ssh-copy-id.py salam@fedora
Traceback (most recent call last):
File "ssh-copy-id.py", line 23, in <module>
parser.add_argument("-i", "--identity_file", help="identity file, default to ~\\.ssh\\idrsa.pub", default=os.environ['HOME']+"\\.ssh\\id_rsa.pub")
File "C:\ProgramData\Anaconda3\lib\os.py", line 675, in __getitem__
raise KeyError(key) from None
KeyError: 'HOME'
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Very useful. Had to comment out the mkdir and touch at lines 39 and 40 because my server already has those but otherwise does what it says. Excellente!