Windows用のssh-copy-idに相当するものはありますか?


56

Windowsで利用可能なssh-copy-idの同等またはポートはありますか?つまり、WindowsでローカルマシンからリモートサーバーにSSHキーを転送する簡単な方法はありますか?

それが役立つ場合、PageantとKitty(Puttyの代替)を既に使用しています。

回答:


27

ssh-copy-idは非常に単純なスクリプトで、Windowsで簡単に複製できます。

すべてのパラメーター処理、エラー処理などを無視すると、これらはssh-copy-idからの2つのコマンドであり、実際にほとんどの作業を実行しています。

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を一時停止する方法があるかどうか知っていますか?
マットV.

パスワード認証とplinkについては確かではありません。実際に使用するたびに、システムにすでにキーがあり、pagentを実行しています。
ゾレダチェ

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ユーザー名は、(時々 「根」、または何でもあなたが設定している場合があります)で、交換してください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
もっと投票してほしい!oneワンライナー用!
-patricktokeeffe

16

ssh-copy-idはいくつかのことを行います(詳細についてはmanページを読んでください)が、最も重要なことは、authorized_keysと呼ばれるリモートファイルにローカル公開鍵ファイルの内容を追加することです。

  • テキストエディタでキーファイルを開き、Kittyターミナルに内容を貼り付けることで、これを自分で行うことができます。
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • または、WinSCP(sftp、またはscpをフォールバックとして使用)を使用してファイルをアップロードし、copyいコピー/貼り付けをせずに、以前の提案と同様の操作を行うことができます。
    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スクリプトもあります。:) readmeからの抜粋:

これまでに試みられた方法:

  • 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アプリ)-成功
    • ホストを選択し、外部ツールを右クリックして、スクリプト名を選択します
  • 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. IDを作成します(Windows上)

c:\>ssh-keygen

これにより、ホームディレクトリにIDファイルが作成されました。公開鍵の名前を「id_rsa」に変更しました

2.答えとしてhttps://serverfault.com/users/984/zoredache のssh クレジットを使用して、ターゲット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. Linux上のファイルを修正します 。Windows のid_rsa.pubファイルは複数行で、Linuxでは1行で入力されるため、少し修正する必要があります。Linuxにログインしてファイルを開きます。

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.ステップ3に進みます。authorized_keys単一行に再フォーマットするだけで十分です。
patricktokeeffe

それがあなたを助けて幸せ-答えに投票してください:)
ディアン

5

ssh-copy-idWindows上にない場合は、サーバー自体で実行できます。

  • PuTTYgenで、秘密キー(.ppk)をロードします。
  • OpenSSH authorized_keysファイル貼り付けるためのボックスの公開キーの内容をクリップボードにコピーします
  • お気に入りのエディターに貼り付けます(Windowsのメモ帳でできます)。
  • .pub拡張子を付けてファイルに内容を保存します。
  • .pubファイルをサーバーにアップロードします。
  • PuTTYなどのSSHクライアントを使用してサーバーにログインします。
  • サーバーで次を入力します。

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

Windowsのssh-copy-idスクリプトには、Git for Windowsが付属しています。Git for Windowsを使用している場合は、ローカルで使用できます。


これを手動で行いたくない場合は、WinSCP 5.15 を使用できます。公開鍵認証を設定できます。WinSCPの[サイトの詳細設定]ダイアログの[SSH]> [認証]ページの[ ツール]> [サーバーへの公開キーのインストール]ボタン
使用します

ここに画像の説明を入力してください

(私はWinSCPの著者です)


これは受け入れられた答えです:Windows 7のgit-bash; Windows 10で利用可能なLinuxサブシステム
アレックス

0

cmder(またはscpとsshを含むmsysgit / mingw)を使用している場合、このための簡単なpythonスクリプトを作成しました。ここにあります:https : //gist.github.com/ceilfors/fb6908dc8ac96e8fc983

使用例:python ssh-copy-id.py user @ remote-machine。

スクリプトの実行時にパスワードが求められます。


なぜcmderが必要なのですか?
デビッドゾリチタ

@ user57411 cmderは不要で、scpコマンドとsshコマンドが必要です。
ceilfors

0

私がやったこと、私のWin10にCygWinを持ち、Linuxに接続する(上記の回答に基づいて):

-注:catを使用すると、cygwinパスとcygwin-linux-folder-structureを使用する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:R​​SAキーペアを生成する

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]

ステップ-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.