是否有相当于 Windows 的 ssh-copy-id?

Mat*_* V. 56 windows ssh port file-transfer ssh-keys

是否有可用于 Windows 的 ssh-copy-id 的等效项或端口?也就是说,有没有一种简单的方法可以在 Windows 下将 SSH 密钥从本地机器传输到远程服务器?

如果有帮助,我已经在使用 Pageant 和Kitty(一种腻子替代品)。

Zor*_*che 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
Run Code Online (Sandbox Code Playgroud)

使用腻子工具,这样的命令应该是等效的(未测试)。

type  public_id | plink.exe username@hostname "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"
Run Code Online (Sandbox Code Playgroud)

如果您想进行所有相同的错误处理和自动键定位,我相信在 Windows 下编写脚本会更加棘手,但肯定是可能的。

  • `plink.exe -pw 密码` 有效。此外,如果您知道 .ssh/authorized_keys 存在,则该命令只是 `type id_rsa.pub | plink.exe -ssh user@host -pw 密码 "cat >> .ssh/authorized_keys"` (4认同)

小智 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认同)

Ken*_*ert 16

ssh-copy-id 做了几件事(阅读手册页了解详细信息),但它所做的最重要的事情是将本地公钥文件的内容附加到名为authorized_keys 的远程文件中。

  • 您可以通过使用文本编辑器打开密钥文件并将内容粘贴到 Kitty 终端中来自己完成此操作。
    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 是您上传的公钥的文件名。


Vij*_*jay 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) - 成功
    • 选择Host,右键,外部工具,选择Scriptname
  • WinSCP 脚本 (.bat) - 成功
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"


小智 5

在 Windows 7 中有一个 ssh.exe

这是对我有用的:

1. 创建身份(在 Windows 上)

c:\>ssh-keygen
Run Code Online (Sandbox Code Playgroud)

这在主目录中创建了一个身份文件。我将公钥的名称更改为“id_rsa”

2. 使用 ssh Credits将文件复制到目标 linux 系统https://serverfault.com/users/984/zoredache for his answer

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
Run Code Online (Sandbox Code Playgroud)

注意:由于某种原因,管道对我不起作用:

# this should work but it didn't work for me 
type file | ssh user@lnxhost "cat >> /tmp/t.txt"
Run Code Online (Sandbox Code Playgroud)

3. 修正linux 上 的文件windows的id_rsa.pub 文件是多行的,而linux 期望它在一行中,所以我们必须稍微修正一下。登录linux并打开文件:

vi ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

例如:

---- 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 ----
Run Code Online (Sandbox Code Playgroud)

应该成为

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla335flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMCY58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVyax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdTLFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHEQkw+1wuV6dFoT1/hngSw== user@winhost
Run Code Online (Sandbox Code Playgroud)

4.测试一下

c:\>ssh user@lnxhost "ls -al /tmp/"
Run Code Online (Sandbox Code Playgroud)

这应该列出 /tmp 的内容而不要求输入密码。


Mar*_*ryl 5

如果您ssh-copy-id在 Windows 上没有,您可以在服务器本身上运行它。

  • 在 PuTTYgen 中,加载您的私钥 (.ppk);
  • 要粘贴到 OpenSSH authorized_keys 文件中的公共密钥框的内容复制到剪贴板。
  • 将其粘贴到您最喜欢的编辑器中(Windows 记事本即可)。
  • 将内容保存到带有.pub扩展名的文件中。
  • .pub文件上传到服务器。
  • 使用 SSH 客户端(如 PuTTY)登录到服务器。
  • 在服务器类型上:

    ssh-copy-id -i mykey.pub username@localhost
    
    Run Code Online (Sandbox Code Playgroud)

在 Windows 上,ssh-copy-id脚本随Git for Windows 提供。所以你可以在本地使用它,如果你有适用于 Windows 的 Git。


如果您不想手动执行此操作,可以使用WinSCP 5.15。它可以为您设置公钥认证。
使用WinSCP 高级站点设置对话框的 SSH > 身份验证页面上的工具 > 将公钥安装到服务器按钮。

在此处输入图片说明

(我是 WinSCP 的作者)