Answers:
该ssh-copy-id
命令(在openssh-client软件包中,默认情况下已安装)执行以下操作:
ssh-copy-id user@hostname.example.com
将您的默认身份(-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 "user@hostname.example.com -p <port-number>"
ssh-copy-id "user@host -p 6842"
brew install ssh-copy-id
然后运行命令。
我喜欢马塞尔的回答。我不知道这个命令。我一直在使用在Oracle网站上找到的内容:
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"'
.ssh
在远程端不存在,我将使用更新的命令来更新帖子。
cat
是没有必要的-一个正常的输入重定向是不够的,比如< ~/.ssh/id_rsa.pub | ssh ...
seahorse
。
在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从启动板服务器下载公钥,从而保护您免受MITM攻击。
在Ubuntu Lucid之前的版本中,您可以使用以下方法完成此操作:
wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys
echo
需要该命令以在带有SSH密钥的行之后获得额外的换行符。
用于自定义端口
ssh-copy-id -i "user@hostname.example.com -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>] ...] [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
切换即可再次如上所述运行命令。