0

使ssh不用输入密码(转)

Posted in Linux at 九月 26th, 2010 / No Comments »
A为本地主机(即用于控制其他主机的机器) ;
B为远程主机(即被控制的机器Server), 假如ip为172.24.253.2 ;
A和B的系统都是Linux

在A上的命令:
# ssh-keygen -t rsa   (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
# ssh root@172.24.253.2 "mkdir .ssh;chmod 0700 .ssh"  (需要输入密码)
# scp ~/.ssh/id_rsa.pub root@172.24.253.2:.ssh/id_rsa.pub  (需要输入密码)

然后在B上的命令:
# touch /root/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
# chmod 600 /root/.ssh/authorized_keys(修改权限)
# cat /root/.ssh/id_rsa.pub   >> /root/.ssh/authorized_keys (将id_rsa.pub的内容追加到 authorized_keys 中)
设置密钥方式
# vim /etc/ssh/sshd_config
去掉下面三项注释
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys

回到A机器:
# ssh root@172.24.253.2 (因为没有设置私钥密码, 所以不需要密码, 登录成功)

如果能保护好自己的私钥, 这种方法相对在shell上输入密码, 要安全一些

##############################################################################################

A为本地主机(即用于控制其他主机的机器) ;
B为远程主机(即被控制的机器Server), 假如ip为172.24.253.2 ;
A和B的系统都是Linux

在A上的命令:
# ssh-keygen -t rsa   (连续三次回车,即在本地生成了公钥和私钥,没有密码)
# ssh root@172.24.253.2 "mkdir .ssh;chmod 0700 .ssh"  (需要输入密码)
# scp ~/.ssh/id_rsa.pub root@172.24.253.2:.ssh/id_rsa.pub  (需要输入密码)

在B上的命令:
# touch /root/.ssh/authorized_keys2 (如果已经存在这个文件, 跳过这条)
# cat /root/.ssh/id_rsa.pub   >> /root/.ssh/authorized_keys2 (将id_rsa.pub的内容追加到 authorized_keys2 中)

回到A机器:
# ssh root@172.24.253.2 (不需要密码, 登录成功)

如果能保护好自己的私钥, 这种方法相对在shell上输入密码, 要安全一些

#########################################################################

深入一点点:

从表面上简单的理解一下登录的过程,
首先 ssh-keygen -t rsa 命令生成了一个密钥和一个公钥, 而且密钥可以设置自己的密码
可以把密钥理解成一把钥匙, 公钥理解成这把钥匙对应的锁头,
把锁头(公钥)放到想要控制的server上, 锁住server, 只有拥有钥匙(密钥)的人, 才能打开锁头, 进入server并控制
而对于拥有这把钥匙的人, 必需得知道钥匙本身的密码,才能使用这把钥匙 (除非这把钥匙没设置密码), 这样就可以防止钥匙被了配了(私钥被人复制)

当然, 这种例子只是方便理解罢了,
拥有root密码的人当然是不会被锁住的, 而且不一定只有一把锁(公钥), 但如果任何一把锁, 被人用其对应的钥匙(私钥)打开了, server就可以被那个人控制了
所以说, 只要你曾经知道server的root密码, 并将有root身份的公钥放到上面, 就可以用这个公钥对应的私钥"打开" server, 再以root的身分登录, 即使现在root密码已经更改!

如果想控制n个机器, 那就需要n对钥匙(密钥和公钥),  ssh-keygen 命令可以随意更改钥匙对的名字, 比如:
[root@wwy .ssh]# 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.102.12
......

这样私钥和公钥的名字分别就是:
id_rsa_192.168.102.12 和 id_rsa_192.168.102.12.pub
然后将 id_rsa_192.168.102.12.pub 文件的内容, 追加到sever的 ~/.ssh/authorized_keys2 文件中,

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

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

完毕

有些时候,我们在复制/移动文件到另一台机器时会用到scp,因为它比较安全。但如果每次

都要输入密码,就比较烦了,尤其是在script里。不过,ssh有另一种用密钥对来验证的方

式。下面写出我生成密匙对的过程,供大家参考。

第一步:生成密匙对,我用的是rsa的密钥。使用命令 “ssh-keygen -t rsa”

   [user1@rh user1]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Created directory ‘/home/user1/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7 user1@rh.test.com
[user1@rh user1]$

生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提示输入一

个不同于你的password的密码,直接回车,让它空着。当然,也可以输入一个。(我比较懒

,不想每次都要输入密码。) 这样,密钥对就生成完了。

其中公共密钥保存在 ~/.ssh/id_rsa.pub
私有密钥保存在 ~/.ssh/id_rsa

然后改一下 .ssh 目录的权限,使用命令 “chmod 755 ~/.ssh”

   [user1@rh user1]$ chmod 755 ~/.ssh
[user1@rh user1]$

之后把这个密钥对中的公共密钥复制到你要访问的机器上去,并保存为

~/.ssh/authorized_keys.

   [user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keys
user1@rh1′s password:
id_rsa.pub                                    100%  228     3.2MB/s   00:00
[user1@rh user1]$

之这样就大功告成了。之后你再用ssh scp sftp 之类的访问那台机器时,就不用输入密码

了,用在script上更是方便。

Published in Linux
Tags: ,

No Responses to “使ssh不用输入密码(转)”

Leave a Reply

请输入算式结果(看不清请点击图片)
(必须)