我在家里很懒,对我的家庭机器使用密码认证。我已经准备好转为基于密钥的认证。网络上有很多关于如何做的选择,包括用猫的方式然后把钥匙传过去,直接把钥匙传过去,等等。
我正在寻找最简单和最值得推荐的复制钥匙的方法,希望在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>"
我喜欢马塞尔的回答。我不知道这个命令。我一直在使用我在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"'
在Ubuntu上,你可以从Launchpad上获取你的钥匙。
ssh-import-id [launchpad account name]
详细内容。
登录后,点击SSH键旁边的按钮:。
将你的公钥文件的内容粘贴在该栏中(包括注释)。 这样的密钥看起来就像
ssh-rsa AAAAB3Nza ......。
UyDOFDqJp lekensteyn
这里,ssh-rsa
表示密钥是RSA密钥,AAAAB3Nza ......是实际密钥,
lekensteyn是注释。 UyDOFDqJp
是实际密钥,lekensteyn
是注释。
4.
按导入公钥保存密钥。
5.
如果一切顺利,你的密钥现在应该列在SSH密钥下:。
需要在需要从远程访问的机器上安装ssh-import-id
包,这个包是和openssh-server
包一起安装的,因为它是openssh-server
的推荐包。
这个包是和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
echo
命令是需要在带有SSH密钥的行后多加一个新行。
用于自定义端口
ssh-copy-id -i "[email protected] -p2222"
-i switch默认为~/.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
我刚刚在Ubuntu 18.04客户端和CentOS 7.6服务器上尝试了以下方法,效果非常好。 这个例子显示了使用自定义的 "2222 "端口,并在"~/.ssh/path-to-rsa.pub "处指定一个公钥。
$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]
在运行该命令之前,我实际上用最后的-n
开关进行了一次试运行,确认了该命令将按预期的方式运行。
确认之后,我又如上所述运行了该命令,但没有使用-n
开关。