2008/03/13
skate
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 [email protected]登录到服务器A,编辑服务器上"~/.ssh/authorized_keys"文件,将客户端机器B上
的"~/.ssh/id_rsa.pub"文件内容追加到"~/.ssh/authorized_keys"文件中。
(注:可以在客户端机器上使用以下命令来实现:
[oracle@skate-test ~]$ cat ~/.ssh/id_rsa.pub |ssh [email protected] "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 [email protected]"即可无密码登录到服务器端。
[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 [email protected] 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
才能重新建立用户等效性。
-------- end --------