Có tương đương với ssh-copy-id cho Windows không?


56

Có bất kỳ cổng tương đương hoặc cổng ssh-copy-id nào có sẵn cho Windows không? Đó là, có một cách dễ dàng để chuyển các khóa SSH từ máy cục bộ sang máy chủ từ xa trong Windows không?

Trong trường hợp có ích, tôi đang sử dụng Pageant và Kitty (một lựa chọn thay thế của Putty).

Câu trả lời:


27

ssh-copy-id là một tập lệnh khá đơn giản nên khá dễ sao chép dưới cửa sổ.

Nếu bạn bỏ qua tất cả các xử lý tham số, xử lý lỗi, v.v., đây là hai lệnh từ ssh-copy-id thực sự đang làm việc hầu hết thời gian.

GET_ID="cat ${ID_FILE}"
{ eval "$GET_ID" ; } | ssh ${1%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1

Sử dụng các công cụ putty một lệnh như thế này sẽ tương đương (không được kiểm tra).

type  public_id | plink.exe username@hostname "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"

Nếu bạn muốn thực hiện tất cả các xử lý lỗi tương tự và vị trí khóa tự động, tôi chắc chắn viết một tập lệnh trong Windows sẽ khó khăn hơn rất nhiều, nhưng chắc chắn là có thể.


1
Cảm ơn! Tôi không thể làm cho nó hoạt động lúc đầu; Tôi đã nhận được lỗi "truy cập bị từ chối", nhưng plink không dừng lại để cho tôi nhập mật khẩu. Sau đó tôi đã thử chuyển mật khẩu bằng cách sử dụng khóa -pw và nó đã hoạt động. Bạn có biết có cách nào để tạm dừng để bạn nhập mật khẩu giữa chừng không?
Matt V.

Không thực sự chắc chắn về xác thực mật khẩu và plink. Bất cứ khi nào tôi thực sự sử dụng nó, tôi đã có chìa khóa của mình trên hệ thống và tôi đang chạy.
Zoredache

4
plink.exe -pw passwordlàm. Ngoài ra nếu bạn biết .ssh / ủy quyền_key tồn tại lệnh đơn giản làtype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
KCD

@KCD Nó là đủ nếu .ssh/thư mục tồn tại. Các >>chuyển hướng sau đó sẽ tạo ra các tập tin nếu nó không tồn tại.
pabouk

20

Những câu trả lời đã không giúp tôi ra ngoài. Tôi thực sự không cần bất kỳ kịch bản điên rồ nào. Tôi đã tạo một khóa công khai trên máy khách của mình trong git bash và đang cố sao chép nó vào VPS.

Sau khi tạo khóa chung của bạn, khóa nên được lưu trữ dưới dạng "(bất kỳ thư mục nào bạn đã bắt đầu) /. Ssh / id_rsa.pub"

Vì vậy, hãy sử dụng lệnh này: tên người dùng của bạn
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys" ở đâu user(đôi khi là "root" hoặc bất cứ thứ gì bạn có thể đã thiết lập) và thay thế 123.45.67.89bằng địa chỉ IP của máy / máy chủ / VPS của bạn.

Nếu thư mục .sshchưa được tạo trên máy chủ, hãy sử dụng biến thể nhỏ này:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"


2
Chúc tôi có nhiều phiếu hơn! Cho một lớp lót!
patricktokeeffe

16

ssh-copy-id thực hiện một số điều (đọc trang man để biết chi tiết), nhưng điều quan trọng nhất là nối các nội dung của tệp khóa công khai cục bộ của bạn vào một tệp từ xa có tên là Author_keys.

  • Bạn có thể tự làm điều này bằng cách mở tệp chính bằng trình soạn thảo văn bản và dán nội dung trong thiết bị đầu cuối Kitty.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • Ngoài ra, bạn có thể tải lên tệp bằng WinSCP (sử dụng sftp hoặc scp làm dự phòng) và làm một cái gì đó tương tự như đề xuất trước đây của tôi, mà không cần sao chép / dán xấu xí.
    cat id_rsa.pub >> .ssh/authorized_keys
    trong đó id_rsa.pub là tên tệp của khóa chung bạn đã tải lên.


5

Lấy cảm hứng từ câu trả lời của zoredache, tôi đã tạo ra một loạt các kịch bản là phiên bản windows. Tuy nhiên tất cả đều phụ thuộc vào plink. Xin hãy xem đây

https://github.com/VijayS1/Scripts/blob/master/ssh-copy-id/

Tôi cũng có một tập lệnh wincp có thể được sử dụng theo câu trả lời khác. :) Trích từ readme:

Các phương pháp đã thử cho đến nay:

  • DOS (.cmd) - Thành công
    • usage: .\Scriptname test@example.com password [identity file]
  • VBS (.vbs) - Thành công
    • usage: .\Scriptname /i:idtest.pub user@example.com /p:password
  • Powershell (.ps1) - Thành công
    • usage: .\Scriptname -i idtest.pub user@example.com password
  • mremoteNG (ứng dụng mở rộng) - Thành công
    • Chọn Máy chủ, nhấp chuột phải, công cụ bên ngoài, chọn Tên tệp
  • Kịch bản WinSCP (.bat) - Thành công
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

1
Đây là khá ngọt ngào
Pred

5

Trong Windows 7 có ssh.exe

Đây là những gì làm việc cho tôi:

1. tạo danh tính (trên windows)

c:\>ssh-keygen

Điều đó tạo ra một tập tin nhận dạng trong thư mục nhà. Tôi đã thay đổi tên của khóa công khai thành "id_rsa"

2. sao chép tệp vào hệ thống linux đích bằng ssh Tín dụng vào https://serverfault.com/users/984/zoredache cho câu trả lời của anh ấy

c:\>ssh user@lnxhost "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" < \\path_to_where_the_file_was_generated_from_ssh_key_gen\id_rsa.pub

Lưu ý: Vì một số lý do, đường ống không hoạt động với tôi:

# this should work but it didn't work for me 
type file | ssh user@lnxhost "cat >> /tmp/t.txt"

3. Sửa tệp trên linux Tệp id_rsa.pub trên windows là đa dòng trong đó linux mong đợi nó trong một dòng duy nhất vì vậy chúng tôi phải sửa nó một chút. Đăng nhập vào linux và mở tệp:

vi ~/.ssh/authorized_keys

Ví dụ:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, user@winhost"
AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla33
5flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMC
Y58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVy
ax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdT
LFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHE
Qkw+1wuV6dFoT1/hngSw==
---- END SSH2 PUBLIC KEY ----

nên trở thành

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla335flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMCY58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVyax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdTLFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHEQkw+1wuV6dFoT1/hngSw== user@winhost

4. kiểm tra nó

c:\>ssh user@lnxhost "ls -al /tmp/"

Điều này sẽ liệt kê nội dung của / tmp mà không yêu cầu mật khẩu.


1
Cho Bước 3. Định dạng authorized_keyslại thành một dòng là tất cả những gì tôi cần!
patricktokeeffe

rất vui vì nó đã giúp bạn - bỏ phiếu trả lời :)
Deian

5

Nếu bạn không có ssh-copy-idtrên Windows, bạn có thể chạy nó trên máy chủ.

  • Trong PuTTYgen, tải khóa riêng của bạn (.ppk);
  • Sao chép nội dung của hộp Khóa công khai để dán vào tệp OpenSSH ủy quyền_key vào bảng tạm.
  • Dán nó vào trình soạn thảo yêu thích của bạn (Windows Notepad sẽ làm).
  • Lưu nội dung vào một tập tin với .pubphần mở rộng.
  • Tải .pubtập tin lên máy chủ.
  • Đăng nhập vào máy chủ bằng máy khách SSH, như PuTTY.
  • Trên loại máy chủ:

    ssh-copy-id -i mykey.pub username@localhost
    

Trên Windows ssh-copy-idscript đi kèm với Git cho Windows . Vì vậy, bạn có thể sử dụng cục bộ đó, nếu bạn có Git cho Windows.


Nếu bạn không muốn làm điều này bằng tay, bạn có thể sử dụng WinSCP 5.15. Nó có thể thiết lập xác thực khóa công khai cho bạn.
Sử dụng Công cụ> Cài đặt Khóa công khai vào nút Máy chủ trên SSH> Trang xác thực của hộp thoại Cài đặt trang nâng cao WinSCP .

nhập mô tả hình ảnh ở đây

(Tôi là tác giả của WinSCP)


Đây phải là câu trả lời được chấp nhận: git-bash cho Windows 7; Hệ thống con Linux có sẵn trong Windows 10
Alex

0

Nếu bạn đang sử dụng cmder (hoặc msysgit / mingw có scp & ssh), tôi chỉ viết một kịch bản python đơn giản cho việc này. Nó có thể được tìm thấy ở đây: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983

Sử dụng mẫu: python ssh-copy-id.py user @ remote-machine.

Mật khẩu sẽ được nhắc khi chạy tập lệnh.


Tại sao điều này đòi hỏi cmder?
David Zorychta

@ user57411 Nó không yêu cầu cmder, nó yêu cầu các lệnh scp và ssh.
trần nhà

0

những gì tôi đã làm, có CygWin trên Win10 của tôi, kết nối với Linux (dựa trên câu trả lời của aboves):

- lưu ý: bằng cách sử dụng cat, nó sẽ tự động giải quyết đường dẫn cygwin, cũng như bất kỳ lệnh cygwin nào bằng cấu trúc thư mục cygwin-linux

1. added c:\cygwin\bin to the environment's Path variable
2. starting cmd.exe (windows commandline)
3. > ssh-keygen -t rsa   (just pressing enter till done)
4. > cat ~/.ssh/id_rsa.pub | ssh user@server "umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys"
5. ..enter server password
6. > ssh user@server (testing, not beeing asked for password)

0

Các bước sau đây sẽ làm:

BƯỚC-1: Tạo cặp khóa RSA

C:\Users\user>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/user//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/user//.ssh/id_rsa.
Your public key has been saved in /c/Users/user//.ssh/id_rsa.pub.
The key fingerprint is:
20:16:9b:0d:00:92:c4:34:99:51:20:b7:ef:50:c4:0f user@localhost

STE2-2: ssh-copy-id tương đương trong windows

C:\Users\user>ssh user@remote "umask 077; test -d .ssh || mkdir .ssh ; cat >> .s
sh/authorized_keys || exit 1" < "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys
 || exit 1" < C:\Users\user\.ssh\id_rsa.pub
The authenticity of host 'remote (xx.xx.xxx.xx)' can't be established.
RSA key fingerprint is 99:99:73:74:fe:14:bc:91:c8:3b:ac:f4:95:99:4d:06.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'remote,xx.xx.xxx.xx' (RSA) to the list of known hosts.
*************************************************************************
This computer system is the property of Sample Corporation and is to
be used for business purposes.  All information, messages, software and
hardware created, stored, accessed, received, or used by you through
this system is considered to be the sole property of Sample Corporation
and can and may be monitored, reviewed, and retained at any time.  You
should have no expectation that any such information, messages or
material will be private.  By accessing and using this computer, you
acknowledge and consent to such monitoring and information retrieval.
By accessing and using this computer, you also agree to comply with
all of Sample Company's policies and standards.
*************************************************************************
user@remote's password:[Enter Password for first time]

BƯỚC-3: Xác thực mật khẩu hoạt động!

C:\Users\user>ssh user@remote
*************************************************************************
This computer system is the property of Sample Corporation and is to
be used for business purposes.  All information, messages, software and
hardware created, stored, accessed, received, or used by you through
this system is considered to be the sole property of Sample Corporation
and can and may be monitored, reviewed, and retained at any time.  You
should have no expectation that any such information, messages or
material will be private.  By accessing and using this computer, you
acknowledge and consent to such monitoring and information retrieval.
By accessing and using this computer, you also agree to comply with
all of Sample Company's policies and standards.
*************************************************************************
Last login: Wed Oct 14 14:37:13 2015 from localhost


0

Phiên bản Powershell cho SSH có trong Git cho Windows

Trong thực tế, nó có thể hoạt động miễn là bạn có sshtrong con đường của bạn. Thêm phần sau vào hồ sơ quyền hạn của bạn:

function ssh-copy-id([string]$userAtMachine){   
    $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub"
    if (!(Test-Path "$publicKey")){
        Write-Error "ERROR: failed to open ID file '$publicKey': No such file"            
    }
    else {
        & cat "$publicKey" | ssh $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"      
    }
}

Trong bảng điều khiển powershell:

ssh-copy-id user@machine

ssh-copy-id không được phép tạo khóa nếu nó không tồn tại.
RalfFriedl

@RalfFriedl Tôi đã xóa keygen
Fab
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.