我在家里很懒,在家用计算机上使用密码验证。我准备转向基于密钥的身份验证。网上有很多方法可以做到这一点,包括先设置键然后将其翻开,直接将其翻动等。

我正在寻找一种最简单,建议的方法来复制密钥希望在Ubuntu ssh包中的某个地方有一个方便包装器吗?

我已经知道如何关闭密码登录。

评论

askubuntu.com/questions/307881/…

#1 楼

ssh-copy-id命令(在openssh-client软件包中,并且默认情况下已安装)完全是这样的:

ssh-copy-id user@hostname.example.com


复制默认身份的公钥(将-i identity_file用于其他身份) )到远程主机。

默认身份是您的“标准” ssh密钥。它由~/.ssh目录中的两个文件(公共密钥和私有密钥)组成,根据密钥的类型,通常分别命名为identityid_rsaid_dsaid_ecdsaid_ed25519(与.pub相同)。如果您创建的ssh密钥不止一个,则不必担心指定身份,ssh-copy-id会自动选择它。

如果您没有身份,您可以使用工具ssh-keygen生成一个端口。

此外,如果服务器使用的端口与默认端口(22)不同,则应以这种方式使用引号(源):

ssh-copy-id "user@hostname.example.com -p <port-number>"


评论


默认身份是什么?

– Oxwivi
2011-6-4 18:28

对于不同的端口,请使用以下命令:ssh-copy-id“ user @ host -p 6842”

– jibon57
2014年1月25日20:27

如果您要复制到的远程服务器不允许密码提示,并且基本上已被锁定保存以进行SSH访问,该怎么办?

– Cyle
2014年1月29日23:13



在Mac上,您可以执行brew install ssh-copy-id,然后运行命令。

– Avishai
2014-09-30 14:31

@MarcelStimberg,请更新答案以包含-i个人资料;人们可能拥有多个按键并将其全部按下,或者不得不在注释中寻找-i选项

–尼克
17 Mar 12 '17 at 18:07

#2 楼

我喜欢马塞尔的回答。我不知道这个命令。我一直在使用在Oracle网站上找到的内容:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'


我想仍将其张贴在这里,因为它很好地说明了可以使用ssh的功能在shell代码中实现。但是使用ssh-copy-id绝对是一种更安全的方法来正确执行此操作!

请注意,如果文件夹.ssh尚不存在,则上述命令将失败。另外,在创建文件时设置一个最小可能的权限可能更好(基本上是仅所有者拥有读写权限)。这是更高级的命令:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'


评论


这个确切的命令也可以在Mac上使用

– Mihai P.
15年2月20日在4:09

它应该可以在具有大多数shell的任何Unix下运行。我已经用一个更新的命令更新了帖子,以防远端不存在.ssh文件夹。

–惠更斯
2015年3月1日14:54

猫不是必需的-正常的输入重定向就足够了,例如<〜/ .ssh / id_rsa.pub | ssh ...

–maxschlepzig
16-3-17在22:44



@惠更斯谢谢。记住这一点更有用,因为您不需要安装任何东西,而且对于执行外部命令(例如,如您在高级示例中演示的那样,更改服务器端权限。

–乔纳森·科玛(Jonathan Komar)
16年3月21日在13:15

我更喜欢这种方式,因为它可以让您使用冗长的ssh,这有助于弄清为什么损坏了东西。 sshcopyid只是冻结而从未工作过,这一切进行得很顺利。

–警笛声
17年5月29日在23:03

#3 楼

图形方法


打开应用程序▸密码和密钥▸我的个人密钥。
选择密钥,然后单击“远程”▸为Secure Shell配置密钥。



评论


我的菜单中没有“密码和加密密钥”。

–乔治·卡斯特罗(Jorge Castro)
2010-09-27 20:33

您正在使用哪个Ubuntu版本?在Ubuntu 10.04 LTS中,默认情况下应可用。

–ændrük
2010-09-27 20:46

10.10,刚刚添加了标签。马塞尔(Marcel)的答案就是我想要的答案,尽管您的台式机答案为+1!

–乔治·卡斯特罗(Jorge Castro)
2010-09-27 21:04

这个程序是海马。

–吉尔斯'所以-不再是邪恶的'
2010-09-27 21:12

我认为此应用程序位于10.10的“系统”->“首选项”菜单中(目前无法检查,我在10.04上)

–惠更斯
2010-10-11 22:07

#4 楼

在Ubuntu上,您可以从Launchpad获取密钥:

ssh-import-id [launchpad account name]


详细信息:


您需要一个Launchpad帐户才能登录或创建帐户

登录后,单击SSH密钥旁边的按钮:


将公共密钥文件的内容粘贴到该字段中(包括注释)。这样的密钥如下:
通过按导入公共密钥保存密钥

如果一切顺利,您的密钥现在应列在SSH密钥下:


软件包ssh-rsa需要安装在需要从远程访问的机器上。该软件包与AAAAB3Nza .... UyDOFDqJp软件包一起安装,因为它是lekensteyn的推荐软件包。确保在客户端计算机上安装了ssh-import-id之后,运行:

ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn


这将通过HTTPS从启动板服务器下载公钥,从而保护您免受MITM攻击。

在Ubuntu Lucid之前的版本上,您可以使用以下命令完成此操作:

ssh-import-id [launchpad account name]


需要openssh-server命令以在之后获得额外的换行符SSH密钥所在的行。


ssh-import-id的手册页


#5 楼

对于自定义端口

ssh-copy-id -i "user@hostname.example.com -p2222"


-i开关默认为〜/ .ssh / id_rsa.pub,如果需要另一个密钥,请将密钥路径放在-i <之后br />
警告:如果您未编写-i,它将复制〜/ .ssh中找到的所有密钥

评论


您确定该警告吗? “ -i identity_file-仅使用identity_file中包含的密钥(而不是通过ssh-add(1)或default_ID_file查找身份)。如果文件名未以.pub结尾,则添加该文件。如果文件名省略,则使用default_ID_file。”

– Yousha Aleayoub
15年4月22日在20:37

#6 楼

解决方案非常简单:
~/.ssh移至新机器并运行ssh-add。完成!
长答案:

在旧机器中,将文件夹~/.ssh放入USB驱动器或您喜欢的任何其他存储中。
在新机器上,将在~下又称为/home/$USER下的文件夹。
在新机器上运行ssh-add

PS做了多次。我对互联网上过于复杂的解决方案感到惊讶,这些解决方案通常不起作用。

#7 楼

ssh-copy-id正是这样做的。我不确定为什么这里的其他一些答案添加了不正确的信息。帮助显示以下内容:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help


我刚刚在具有CentOS 7.6服务器的Ubuntu 18.04客户端上尝试了以下操作,它像一个魅力一样工作。该示例显示了使用2222的自定义端口,并在~/.ssh/path-to-rsa.pub处指定了公钥

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld


在运行命令之前,我实际上在最后使用了-n开关经过试运行,确认该命令将按预期运行。确认后,我又重新运行了上述命令,没有使用-n开关。

#8 楼

如果您已经拥有一个主机密钥(例如AWS EC2),请执行

cat ~/.ssh/id_rsa.pub | ssh -i hostkey.pem hostname@hostaddress 'cat >> .ssh/authorized_keys && echo "Key copied" '


下次,只需执行以下操作:

ssh hostname@hostaddress