ssh-keygen生成密钥对

Submitted by Dot on Tue, 09/03/2013 - 11:19

Linux自带openssh,并且默认开启openssh-server。

[[email protected] ~]# systemctl status sshd
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Tue 2013-09-03 07:55:01 CST; 3h 24min ago
 Main PID: 1004 (sshd)
   CGroup: name=systemd:/system/sshd.service
           └─1004 /usr/sbin/sshd -D

在未生成key pair时,是通过远程主机上的用户密码登录的。 我们可以通过在客户端用ssh-keygen命令在~/.ssh/下生成一对密钥(默认文件名id_rsa和id_rsa.pub),然后将公钥id_rsa.pub保存到服务器上,从而实现密钥登录。

我在Fedora 19主机(Emma)上用VirtualBox安装另一个Fedora 19,以构成实验环境,虚拟机(test)做客户端,主机(Emma)做服务器。当然,ssh 127.0.0.1也可以。

现在客户端test上用ssh-keygen生成密钥对。

ssh-keygen

生成后尝试连接,依然提示要用户密码。这是因为服务器Emma上的~Dotcra/.ssh/目录里还是空的。

接下来用ssh-copy-id命令将公钥id_rsa.pub发送至服务器对应用户家目录下的/.ssh/目录里。

authorized_keys

此时~Dotcra/.ssh/下出现了一个叫做authorized_keys的文件,相关配置在服务器端的/etc/ssh/sshd_config中。经比对,和id_rsa.pub完全一样。所以现在输入私钥密码就能登录,不再需要用户密码了。

March 22, 2014 用scp id_rsa.pub [email protected]:/home/Dotcra/.ssh/authorized_keys虽然也能达到同样效果,但一定要指定文件名authorized_keys,并且,如果多台客户端通过密钥连接,还需要把其他客户端生成的公钥手工加到authorized_keys后面,而ssh-copy-id可以自动追加。

至于客户端的私钥,当连接ssh服务器时默认会比对客户端~/.ssh/下文件名为id_rsa的私钥。如果保存了数个不同的私钥,可以在客户端的/etc/ssh/ssh_config中添加多个IdentityFile属性,连接时会按排列顺序比对。

更方便的办法则是连接时通过-i选项指定私钥的路径及文件名。

March 31, 2016 其实最根本的方法还是在配置文件中为Host指定IdentityFile,这样连接时不用-i选项也能根据不同的Host自动选择相应的私钥。

编辑~/.ssh/config,加入如下内容即可:

175

March 22, 2014

私钥可以复制到别的电脑上使用,但复制后权限可能发生变化,需要检查并确认他人无读写权限,否则连接时服务器会拒绝此密钥。

Add new comment

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.