我在家里很懒,对家用机器使用密码验证。我准备转向基于密钥的身份验证。网上有很多关于如何做到这一点的选项,包括捕获然后将密钥翻过来,直接搜索密钥等。
我正在寻找最简单和推荐的复制密钥的方法,希望在Ubuntu ssh包中的某个地方有一个方便的包装器?
我已经知道 如何关闭密码登录 。
ssh-copy-id
命令(在openssh-client包中并默认安装)完成此操作:
ssh-copy-id [email protected]
将默认标识的公钥(使用-i identity_file
用于其他标识)复制到远程主机。
默认标识是您的“标准”ssh密钥。它由~/.ssh
目录中的两个文件(公钥和私钥)组成,通常名为identity
,id_rsa
,id_dsa
,_ id_ecdsa
或id_ed25519
(与.pub
相同),具体取决于键的类型。如果您没有创建多个ssh密钥,则不必担心指定标识,ssh-copy-id将自动选择它。
如果您没有身份,可以使用工具ssh-keygen
生成一个身份。
此外,如果服务器使用的端口与默认端口(22
)不同,则应使用这种方式引用标记( source ):
ssh-copy-id "[email protected] -p <port-number>"
我喜欢马塞尔的答案。我不知道这个命令。我一直在使用我在 Sun网站 上找到的东西:
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'
我想在这里发布它,因为它很好地说明了Shell代码可以实现的功能ssh
。但使用ssh-copy-id
绝对是一种更安全的方法!
请注意,如果文件夹.ssh
尚不存在,则上述命令将失败。此外,在创建文件以设置最小可能权限(基本上只对所有者进行读写)时可能会更好。这是一个更高级的命令:
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
在Ubuntu上,您可以从Launchpad获取密钥:
ssh-import-id [launchpad account name]
详情:
将公钥文件的内容粘贴到该字段中(包括注释)。这样的关键看起来像:
ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
这里,ssh-rsa
表示密钥是RSA密钥,AAAAB3Nza .... UyDOFDqJp
是实际密钥,lekensteyn
是注释。
包ssh-import-id
需要安装在需要从远程访问的机器上。该软件包与openssh-server
软件包一起安装,因为它是openssh-server
的推荐软件包。确保已安装ssh-import-id
后在客户端计算机上运行:
ssh-import-id [launchpad account name]
这将通过HTTPS从Launchpad服务器下载公钥,以保护您免受MITM攻击。
在Ubuntu Lucid和之前,您可以通过以下方式完成相同的工作:
wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys
在使用SSH密钥的行之后获取额外的换行符需要echo
命令。
用于自定义端口
ssh-copy-id -i "[email protected] -p2222"
-i开关默认为〜/ .ssh/id_rsa.pub,如果你想要另一个键,在-i之后放入键的路径
警告:如果你没有写-i,它将复制〜/ .ssh中找到的所有密钥
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>] ...] [[email protected]]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 [email protected]
在运行命令之前,我实际上使用了末尾的-n
开关来进行干运行,这确认命令将按预期工作。一旦我确认它,我再次运行命令,没有-n
开关。