Windows 용 ssh-copy-id와 동등한 기능이 있습니까?


56

Windows에서 사용할 수있는 ssh-copy-id 포트가 있습니까? 즉, Windows에서 SSH 키를 로컬 컴퓨터에서 원격 서버로 쉽게 전송할 수 있습니까?

도움이된다면 이미 Pageant와 Kitty (Putty 대안)를 사용하고 있습니다.

답변:


27

ssh-copy-id는 매우 간단한 스크립트로 Windows에서 쉽게 복제 할 수 있어야합니다.

모든 매개 변수 처리, 오류 처리 등을 무시하면 실제로 대부분의 작업을 수행하는 ssh-copy-id의 두 명령입니다.

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

퍼티 도구를 사용하면 이와 같은 명령이 동일해야합니다 (테스트되지 않음).

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

동일한 오류 처리와 자동 키 위치를 모두 원한다면 Windows에서 스크립트를 작성하는 것이 훨씬 까다로울 수 있지만 확실합니다.


1
감사! 처음에는 작동하지 못했습니다. "액세스 거부"오류가 다시 발생했지만 plink가 비밀번호를 입력 할 수 있도록 멈추지 않았습니다. 그런 다음 -pw 스위치를 사용하여 plink에 암호를 전달하려고 시도했지만 작동했습니다. 중간에 암호를 입력하기 위해 plink를 일시 중지하는 방법이 있는지 알고 있습니까?
Matt V.

비밀번호 인증 및 plink에 대해 잘 모르겠습니다. 실제로 사용할 때마다 시스템에 이미 키가 있으며 pagent가 실행 중입니다.
Zoredache

4
plink.exe -pw password공장. 당신은 SSH를 알고 또한 경우 / authorized_keys에 명령이 단순히 존재type id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
KCD

@KCD .ssh/디렉토리가 존재 하면 충분 합니다. >>존재하지 않는 경우 리디렉션은 다음 파일을 생성합니다.
pabouk

20

이 답변은 도움이되지 않았습니다. 나는 정말 미친 스크립트가 필요하지 않았습니다. 클라이언트 컴퓨터에서 git bash의 공개 키를 만들고 VPS에 복사하려고했습니다.

공개 키를 만든 후 키는 "(시작한 폴더) /. ssh / id_rsa.pub"로 저장해야합니다.

따라서이 명령을 사용하십시오 :
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys" 여기서 user사용자 이름은 ( "root"또는 설정 한 내용) 123.45.67.89시스템 / 호스트 / VPS의 IP 주소로 바꾸 십시오.

.ssh호스트 시스템 에서 디렉토리 가 아직 작성되지 않은 경우 다음과 같은 작은 변형을 사용하십시오.
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"


2
더 많은 표를 얻길 바랍니다! 하나의 라이너를 위해 👍!
patricktokeeffe

16

ssh-copy-id는 몇 가지 작업을 수행 하지만 (자세한 내용 은 맨 페이지 를 읽으십시오 ) 가장 중요한 것은 로컬 공개 키 파일의 내용을 authorized_keys라는 원격 파일에 추가하는 것입니다.

  • 텍스트 편집기로 키 파일을 열고 키티 터미널에 내용을 붙여 넣어서 직접 할 수 있습니다.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • 또는 WinSCP 를 사용 하여 파일을 업로드하고 (sftp 또는 scp를 대체로 사용) 추악한 복사 / 붙여 넣기없이 이전 제안과 비슷한 작업을 수행 할 수 있습니다.
    cat id_rsa.pub >> .ssh/authorized_keys
    여기서 id_rsa.pub는 업로드 한 공개 키의 파일 이름입니다.


5

zoredache의 답변에서 영감을 얻어 Windows 버전 인 많은 스크립트를 만들었습니다. 그러나 그들은 모두 plink에 의존합니다. 여기를보세요

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

또한 다른 답변에 따라 사용할 수있는 winscp 스크립트가 있습니다. :) 읽어보기에서 발췌 :

지금까지 시도한 방법 :

  • DOS (.cmd)-성공
    • usage: .\Scriptname test@example.com password [identity file]
  • VBS (.vbs)-성공
    • usage: .\Scriptname /i:idtest.pub user@example.com /p:password
  • Powershell (.ps1)-성공
    • usage: .\Scriptname -i idtest.pub user@example.com password
  • mremoteNG (ext app)-성공
    • 호스트를 선택하고 마우스 오른쪽 버튼을 클릭 한 다음 외부 도구를 선택하고 스크립트 이름을 선택하십시오.
  • WinSCP 스크립트 (.bat)-성공
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

1
이들은 꽤 달다
Pred

5

Windows 7에는 ssh.exe가 있습니다

다음은 나를 위해 일한 것입니다.

1. 아이덴티티 생성 (창에서)

c:\>ssh-keygen

홈 디렉토리에 ID 파일이 작성되었습니다. 공개 키 이름을 "id_rsa"로 변경했습니다.

2. 그의 답변을 위해 https://serverfault.com/users/984/zoredachessh 크레딧을 사용하여 파일을 대상 Linux 시스템에 복사하십시오.

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

참고 : 어떤 이유로 배관이 작동하지 않았습니다.

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

3. 리눅스에서 파일 수정하기 윈도우상의 id_rsa.pub 파일은 리눅스가 한 줄로 예상하는 여러 줄로되어 있으므로 약간 수정해야합니다. 리눅스에 로그인하여 파일을 엽니 다 :

vi ~/.ssh/authorized_keys

예를 들면 다음과 같습니다.

---- 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 ----

되어야한다

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

4. 테스트

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

암호를 묻지 않고 / tmp의 내용을 나열해야합니다.


1
👍 3 단계. authorized_keys한 줄로 다시 포맷 하기 만하면됩니다 !
patricktokeeffe

도움이
되었습니까?

5

당신이없는 경우 ssh-copy-idWindows에서, 당신은 서버 자체에서 실행할 수 있습니다.

  • PuTTYgen에서 개인 키 (.ppk)를로드하십시오.
  • OpenSSH certified_keys 파일에 붙여 넣기위한 공개 키 상자의 내용을 클립 보드에 복사하십시오.
  • 좋아하는 편집기에 붙여 넣습니다 (Windows 메모장에서 수행).
  • .pub확장자 가있는 파일에 내용을 저장하십시오 .
  • .pub파일을 서버에 업로드하십시오 .
  • PuTTY와 같은 SSH 클라이언트를 사용하여 서버에 로그인하십시오.
  • 서버에서 다음을 입력하십시오.

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

Windows ssh-copy-id스크립트 에서는 Windows 용 Git 이 제공됩니다 . 따라서 Git for Windows가있는 경우 로컬에서 사용할 수 있습니다.


이 작업을 수동으로 수행하지 않으려면 WinSCP 5.15를 사용할 수 있습니다 . 공개 키 인증을 설정할 수 있습니다. SSH> WinSCP 고급 사이트 설정 대화 상자의 인증 페이지 에서 도구> 서버에 공개 키 설치 단추를
사용하십시오 .

여기에 이미지 설명을 입력하십시오

(저는 WinSCP의 저자입니다)


이것은 정답이어야합니다. Windows 7 용 git-bash; Windows 10에서 사용할 수있는 Linux 하위 시스템
Alex

0

당신이 사용하는 경우 cmder (SCP 및 SSH가 있거나 msysgit /와 Mingw를) 그냥 이것에 대한 간단한 파이썬 스크립트를 썼다. https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983 에서 찾을 수 있습니다.

샘플 사용법 : python ssh-copy-id.py user @ remote-machine.

스크립트를 실행하면 비밀번호가 프롬프트됩니다.


왜 cmder가 필요합니까?
David Zorychta

@ user57411 cmder가 필요 없으며 scp 및 ssh 명령이 필요합니다.
ceilfors

0

내가 한 일, CygWin을 Win10에 가지고 Linux에 연결 (위의 답변을 기반으로) :

-참고 : cat을 사용하면 cygwin-linux-folder-structure를 사용하는 cygwin 명령뿐만 아니라 cygwin 경로를 자동으로 해결합니다.

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

다음 단계를 수행하십시오.

1 단계 : 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 : Windows에서 ssh-copy-id에 해당

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]

STEP-3 : 비밀번호없는 인증 작동!

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

Git For Windows에 포함 된 SSH 용 Powershell 버전

실제로, 그것은 당신이 ssh당신의 경로에 있는 한 작동 할 수 있습니다 . powershell 프로파일에 다음을 추가하십시오.

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"      
    }
}

Powershell 콘솔에서 :

ssh-copy-id user@machine

ssh-copy-id는 존재하지 않는 키를 생성하지 않습니다.
RalfFriedl

@RalfFriedl 저는 keygen을 제거했습니다
Fab
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.