`
275553385
  • 浏览: 704107 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
文章分类
社区版块
存档分类
最新评论

使用SSH公钥(id_dsa.pub)实现免密码登录

阅读更多
首先,在本地机器上产生公钥:
[root@localhost .ssh]# ssh-keygen -d            一直按回车键 
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 
/root/.ssh/id_dsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
89:77:aa:a2:d8:31:35:1e:3a:34:9e:b9:da:ea:62:34 root@localhost.localdomain
[root@localhost .ssh]#


然后把产生的公钥传到想要登陆的远程机器上,如果是root用户登陆远程的话,把公钥放在/root/.sshd目录下面。
[root@localhost .ssh]# scp /root/.ssh/id_dsa.pub root@192.168.0.60:/root/.ssh/
root@192.168.0.60's password:                 需输入远程机器的登录密码
id_dsa.pub                                    100%  616     0.6KB/s   00:00    

在远程的机器上修改该文件的名称:
[root@web1 .ssh]# mv id_dsa.pub authorized_keys

最终实现ssh的免密码登陆。

SSH免密码登陆效果:

[root@localhost .ssh]# ssh root@192.168.0.60
Last login: Tue Sep 27 09:03:10 2011 from 192.168.0.3
[root@web1 ~]# 


=========================================================================================
二、多台服务器相互无密码访问

多台服务器相互无密码访问,与两台服务器单向无密码访问的原理是一样的,只不过由于是多台服务器之间相互无密码访问,不能象两台服务器无密码登录那样直接上传,步骤如下:

1、在每台服务器上都执行ssh-keygen -t rsa生成密钥对:
#ssh-keygen -t rsa

2、在每台服务器上生成密钥对后,将公钥复制到需要无密码登陆的服务器上:
举例如192.168.15.240,192.168.15.241,192.168.15.242这三台服务器需要做相互免密码登陆,在每台服务器生成密钥对后,在每台服务器上执行ssh-copy-id命令(具体说明及用法见最后附录),将公钥复制到其它两台服务器上(此处以192.168.15.240为例,用户为root,其它两台步骤相同)
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.15.241
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.15.242
以上命令,可以自动将公钥添加到名为authorized_keys的文件中,在每台服务器都执行完以上步骤后就可以实现多台服务器相互无密码登陆了
附ssh-copy-id介绍及用法:

Linux系统里缺省都包含一个名为ssh-copy-id的工具:

# type ssh-copy-id
ssh-copy-id is /usr/bin/ssh-copy-id

你用cat或者more命令看一下就知道ssh-copy-id本身其实就是一个shell脚本,用法很简单:

# ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

再也不用记如何拼写authorized_keys这个文件名了,是不是很爽,可惜别高兴太早了,ssh-copy-id有一个很要命的问题,那就是缺省它仅仅支持SSH运行在22端口的情况,不过实际上出于安全的需要,我们往往都会更改服务器的SSH端口,比如说改成10022端口,这时候你运行ssh-copy-id就会报错了,直接修改ssh-copy-id脚本当然可以修正这个问题,但是那样显得太生硬了,实际上还有更好的办法:

# vi ~/.ssh/config

加上内容:

Host server
Hostname ip
Port 10022

你也可以单独只加入Port一行配置,那样就是一个全局配置,保存后再运行ssh-copy-id命令就不会报错了。

补充:经网友提示,如果端口不是22,不修改config文件,按如下方式也可以:

ssh-copy-id -i ~/.ssh/id_rsa.pub “-p 10022 user@server”

分享到:
评论
3 楼 275553385 2013-10-31  
关闭SSH传统密码登陆方式

公司为了安全,一直都采用PublicKey文件的方式登陆远程SSH,现在有了自己的服务器,自己又学者配了一把,下面就是配置笔记。

生成DSA类型的PublicKey文件
Linux: ssh-keygen -t dsa
Windows: SecurCRT

将生成的.pub公钥文件拷贝到~/.ssh/目录下,并重命名为authorized_keys,如果已经存在authorized_keys,那么就新建一行将公钥文件的内容拷贝进去。修改authorized_keys权限为600(很重要,如果权限不安全,则无法使用该功能)

验证登陆是否正确,在ssh客户端配置登陆方式由password改为publickey,文件使用生成的公钥文件即可,不过,putty比较特殊,稍后会专门讲解。

如果登陆失败,请检查ssh配置文件(/etc/ssh/sshd_config)中的PubkeyAuthentication是否为yes。

如果验证成功的话就可以关闭密码登陆方式了,编辑/etc/ssh/sshd_config,将PasswordAuthentication改为no,ChallengeResponseAuthentication改为no,不过需要重启sshd(service sshd restart)后才能生效。



关于putty的登陆设置,由于putty与ssh2的key文件不同,所以要用puttygen.exe转换一下,运行puttygen.exe,选择Conversions->Import key,选择privateKey文件,注意这里要选privatekey文件,而不是前面用的publickey文件,最后选择"save private key"将密钥保存为.ppk文件,这个就是putty需要的key文件。

运行putty,填写完session信息后,到connection->ssh->auth中指定好privatekey文件即可,当然也可以在connection->data中设置上auto-login username
2 楼 275553385 2013-10-31  
(此文件权限,设置.ssh为700 、authorized_keys为600)。并且注意所属用户组,组群
1 楼 275553385 2013-06-04  
 ssh-keygen -t rsa  

相关推荐

Global site tag (gtag.js) - Google Analytics