SSH公钥、私钥的设置

如果在两台相互信任,其实步骤挺简单,假设要从主机1上执行,ssh,scp操作。

主机1:host1    用户1:user1
主机2:host2    用户2:user2
一、在主机1上执行下列操作:

1、/user1/.ssh/ 目录下执行:

$	ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8c:2c:de:8b:dd:57:da:19:32:5d:83:62:18:01:85:75 root@backup
The key's randomart image is:

2、一路默认回车,生成 id_rsa.pub 文件

3、cat id_rsa.pub >> authorized_keys

二、在主机2上执行下列操作:

1、拷贝主机1上的authorized_keys文件到 /user2/.ssh/ 目录下 scp authorized_keys root@host2:/root/.ssh/

2、更改目录访问权限:

chmod 700 ~/.ssh/     
chmod 600 ~/.ssh/authorized_keys

这是linux的安全要求,如果权限不对,自动登录将不会生效(ps:对于目录644与600的效果差不多,没有x权限便不能进入目录)

三、至此公钥、私钥就设置好了

NOTE:

首先ssh-keygen -t rsa命令生成了一个密钥和一个公钥, 而且密钥可以设置自己的密码。可以把密钥理解成一把钥匙, 公钥理解成这把钥匙对应的锁头,把锁头(公钥)放到想要控制的server上, 锁住server, 只有拥有钥匙(密钥)的人, 才能打开锁头, 进入server并控制。而对于拥有这把钥匙的人, 必需得知道钥匙本身的密码,才能使用这把钥匙 (除非这把钥匙没设置密码), 这样就可以防止钥匙被了配了(私钥被人复制)。当然, 这种例子只是方便理解罢了,拥有root密码的人当然是不会被锁住的, 而且不一定只有一把锁(公钥), 但如果任何一把锁, 被人用其对应的钥匙(私钥)打开了, server就可以被那个人控制了。所以说, 只要你曾经知道server的root密码, 并将有root身份的公钥放到上面, 就可以用这个公钥对应的私钥"打开"server, 再以root的身分登录, 即使现在root密码已经更改! 如果想控制n个机器, 那就需要n对钥匙(密钥和公钥), ssh-keygen命令可以随意更改钥匙对的名字, 最好取容易识别的文件名,比如: 

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa): /root/.ssh/id_rsa_192.168.10.1
......

这样私钥和公钥的名字分别就是: id_rsa_192.168.10.1  和 id_rsa_192.168.10.1.pub 

然后将 id_rsa_192.168.0.1.pub 文件的内容, 追加到服务器的~/.ssh/authorized_keys文件中,

最后, 在本地用ssh命令的 -i 参数指定本地密钥, 并登录:  # ssh -i /root/.ssh/id_rsa_192.168.10.1 192.168.10.1

如果密钥设置了密码, 就用密钥的密码登录, 没设密码, 就直接登录进去了。scp也是一样。

补充: 拷贝公钥文件到服务器上这个过程可以用ssh-copy-id命令来完成

默认用法:
ssh-copy-id user2@host2
自定义用法:
ssh-copy-id -i 公钥文件路径 user2@host2
ssh-copy-id -p 服务器SSH服务端口 user2@host2

评论

评论正在提交中...请稍后
评论提交成功...