您的位置:首页 > 其它

ssh无需密码提示登录

2010-08-09 16:40 274 查看
ssh无需输入密码登录

这个是我要做oracle RAC的一个准备条件.

服务器: 192.168.0.221 A

客户端: 192.168.0.220 B

测试目的: 我要用oracle无需输入密码登录 A

实现原理:

使用一种被称为"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单的解释是

1.首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)
2.然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥
3.当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了

说明:

第一步是生成 SSH 的公共密钥和专用密钥。 SSH 协议有两个版本;版本 1 使用 RSA,版本 2 使用 DSA,
因此我们将创建这两种类型的密钥,以确保 SSH 能够使用任一版本。 ssh-keygen 程序将根据传递给它的参数生
成任一类型的公共密钥和专用密钥。

对于oracle用户,应该准备条件:

在服务器A上:

mkdir ~/.ssh
chmod 755 ~/.ssh

在客户端B:

mkdir ~/.ssh
chmod 755 ~/.ssh

步骤:
1. 在客户端B上以oracle登录,并执行"ssh-keygen -t rsa"

[oracle@skate-test ~]$ /usr/bin/ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
3a:3f:ba:75:07:23:76:43:4c:80:a7:a3:86:c6:9c:70

(注:每次执行"ssh-keygen -t rsa"产生的私钥文件都会不同)

a)如果文件"~/.ssh/id_rsa"存在,会提示是否覆盖该文件,此时可选择"n"不覆盖该文件而使用已有的id_rsa文件;
如果选择"y"则会重新生成"~/.ssh/id_rsa"文件,接下来会提示输入passphrase,回车确定使用空的passphrase,再次
回车确认(这里也可以输出passphrase,相当于ssh时登录的密码)。然后会重新生成"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件

b)如果"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件不存在则会自动创建新的"~/.ssh/id_rsa"文件
和"~/.ssh/id_rsa.pub"文件,passphrase设置同上。

2 .使用ssh oracle@192.168.0.221登录到服务器A,编辑服务器上"~/.ssh/authorized_keys"文件,将客户端机器B上
的"~/.ssh/id_rsa.pub"文件内容追加到"~/.ssh/authorized_keys"文件中。

(注:可以在客户端机器上使用以下命令来实现:

[oracle@skate-test ~]$ cat ~/.ssh/id_rsa.pub |ssh oracle@192.168.0.221 "cat >>~/.ssh/authorized_keys"

此时会要求输入oracle在服务器A上的登录密码,输入后即会将客户端机器上的"~/.ssh/id_rsa.pub"文件内容追加到服务器
上的"~/.ssh/authorized_keys"文件中)

3.如果在第一步设置了passphrase密码,在这里还要做一些特殊设置,我们可以通过ssh-agent来帮助我们自动输入passphrase
(只是看起来像是自动输入而已),我们只要在第一次登录时输入一次passphrase, 以后的工作就可以交给ssh-agent。
在客户端机器B上执行命令ssh-add,这里会提示输入一次passphrase。输入第一步中设置的passphrase之后会修
改"~/.ssh/id_rsa"文件。再在客户端B执行"ssh oracle@192.168.0.221"即可无密码登录到服务器端。

[oracle@skate-test ~]$ ssh-add //用这个就可以了,但我在oracle的官方文档关于RAC的配置了看到下面的注释
Enter passphrase for /home/oracle/.ssh/id_rsa:
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
[oracle@skate-test ~]$ ssh oracle@192.168.0.221 date
Thu Mar 13 17:24:52 CST 2008

注释:
$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa:
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

我也测试过这个,也可以.但有什么区别,不是很清楚

4,在服务器A应该设置

[oracle@skate-test ~]$ chmod 644 ~/.ssh/authorized_keys

注意:

1. 现在可以用ssh在客户端B上无密码提示进入服务器A,如果要想用ssh从服务器A无密码提示计入客户端B,,只要按着上面
的顺序在服务端A上操作就可以.

2. 因SSH 协议有两个版本;版本1 使用 RSA,版本2 使用 DSA,因此在生产环境中,我们将创建这两种类型的密钥,以确保 SSH
能够使用任一版本,ssh-keygen 程序将根据传递给它的参数生成任一类型的公共密钥和专用密钥。

我们上面的测试中只生成了ssh 协议版本1 RSA,如果要生成ssh 协议版本2 DSA,只要用命令:

[oracle@skate-test ~]$ /usr/bin/ssh-keygen -t dsa

以后的操作和rsa的操作一样.

3. 请注意,用户等效性仅为当前会话建立。 如果您切换到其他会话或注销并重新登录,则必须再次运行 ssh-agent 和 ssh-add
才能重新建立用户等效性。

from:http://blog.csdn.net/wyzxg/archive/2008/03/13/2177502.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: