将ssh密钥复制到另一台机器的最简单方法?
我在家里很懒,对家用机器使用密码validation。 我准备转向基于密钥的身份validation。 网上有很多关于如何做到这一点的选项,包括捕获然后将密钥翻过来,直接搜索密钥等。
我正在寻找最简单和推荐的方法来复制密钥,希望在Ubuntu ssh包中的某处有一个便利包装器?
我已经知道如何关闭密码登录 。
ssh-copy-id
命令(在openssh-client软件包中并默认安装)正是这样做的:
ssh-copy-id user@hostname.example.com
将默认标识的公钥(使用-i identity_file
用于其他标识)复制到远程主机。
默认标识是您的“标准”ssh密钥。 它由~/.ssh
目录中的两个文件(公钥和私钥)组成,通常名为identity
, id_rsa
或id_dsa
(与.pub
相同),具体取决于键的类型。 如果您没有创建多个ssh密钥,则不必担心指定标识,ssh-copy-id将自动选择它。
如果您没有身份,可以使用ssh-keygen
工具生成一个身份。
此外,如果服务器使用的端口不同于默认端口( 22
),则应使用这种方式引用标记( 源 ):
ssh-copy-id "user@hostname.example.com -p "
我喜欢马塞尔的答案。 我不知道这个命令。 我一直在使用我在SUN网站上找到的内容:
cat ~/.ssh/id_rsa.pub | ssh @ 'cat >> .ssh/authorized_keys && echo "Key copied"'
我想在这里发布它,因为它很好地说明了在ssh
的强大function下shell代码可以实现的function。 但是使用ssh-copy-id
绝对是一种更安全的方法!
请注意,如果文件夹.ssh
尚不存在,则上述命令将失败。 此外,在创建文件以设置最小可能权限(基本上只对所有者进行读写)时可能会更好。 这是一个更高级的命令:
cat ~/.ssh/id_rsa.pub | ssh @ 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
图形方法
- 打开应用程序 ▸ 密码和密钥 ▸ 我的个人密钥 。
- 选择您的密钥,然后单击远程 ▸ 配置安全Shell的密钥 。
在Ubuntu上,您可以从Launchpad获取密钥:
ssh-import-id [launchpad account name]
细节 :
- 您需要一个Launchpad帐户才能登录或创建帐户
- 登录后,单击SSH密钥旁边的按钮:
-
将公钥文件的内容粘贴到该字段中(包括注释)。 这样的关键看起来像:
ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
这里,
ssh-rsa
表示密钥是RSA密钥,AAAAB3Nza .... UyDOFDqJp
是实际密钥,lekensteyn
是注释。 - 按导入公钥保存密钥
- 如果一切顺利,您的密钥现在应该在SSH密钥下列出:
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-import-id的手册页
用于自定义端口
ssh-copy-id -i "user@hostname.example.com -p2222"
-i开关默认为〜/ .ssh / id_rsa.pub,如果你想要另一个键,在-i之后放入键的路径
警告:如果你没有写-i,它将复制〜/ .ssh中的所有密钥