加载中…
个人资料
Alexanderyu
Alexanderyu
  • 博客等级:
  • 博客积分:0
  • 博客访问:31,263
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

客户端通过私钥登录ssh服务器

(2015-05-10 15:40:29)
标签:

it

证书

密钥

客户端

服务器

分类: RHEL

前言

本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题,以及实现hadoop集群部署要求的无密码跳转问题。

ssh有密码登录和证书登录,初学者都喜欢用密码登录,甚至是root账户登录,密码是123456。但是在实际工作中,尤其是互联网公司,基本都是证书登录的。内网的机器有可能是通过密码登录的,但在外网的机器,如果是密码登录,很容易受到攻击,真正的生产环境中,ssh登录都是证书登录。

证书登录的步骤

1.客户端生成证书:私钥和公钥,然后私钥放在客户端,妥当保存,一般为了安全,访问有黑客拷贝客户端的私钥,客户端在生成私钥时,会设置一个密码,以后每次登录ssh服务器时,客户端都要输入密码解开私钥(如果工作中,你使用了一个没有密码的私钥,有一天服务器被黑了,你是跳到黄河都洗不清)。

2.服务器添加信用公钥:把客户端生成的公钥,上传到ssh服务器,添加到指定的文件中,这样,就完成ssh证书登录的配置了。

假设客户端想通过私钥要登录其他ssh服务器,同理,可以把公钥上传到其他ssh服务器。

真实的工作中:员工生成好私钥和公钥(千万要记得设置私钥密码),然后把公钥发给运维人员,运维人员会登记你的公钥,为你开通一台或者多台服务器的权限,然后员工就可以通过一个私钥,登录他有权限的服务器做系统维护等工作,所以,员工是有责任保护他的私钥的,如果被别人恶意拷贝,你又没有设置私钥密码,那么,服务器就全完了,员工也可以放长假了。

客户端建立私钥和公钥

在客户端终端运行命令

ssh-keygen -t rsa

rsa是一种密码算法,还有一种是dsa,证书登录常用的是rsa。

假设用户是blue,执行 ssh-keygen 时,才会在我的home目录底下的 .ssh/ 这个目录里面产生所需要的两把 Keys ,分别是私钥 (id_rsa) 与公钥 (id_rsa.pub)

另外就是私钥的密码了,如果不是测试,不是要求无密码ssh,那么对于passphrase,不能输入空(直接回车),要妥当想一个有特殊字符的密码。

ssh服务端配置

ssh服务器配置如下:

复制代码
vim /etc/ssh/sshd_config
#禁用root账户登录,非必要,但为了安全性,请配置
PermitRootLogin no

# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no

# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys

#有了证书登录了,就禁用密码登录吧,安全要紧
PasswordAuthentication no
复制代码

配置好ssh服务器的配置了,那么我们就要把客户端的公钥上传到服务器端,然后把客户端的公钥添加到authorized_keys

在客户端执行命令

scp ~/.ssh/id_rsa.pub blue@:~

在服务端执行命令

cat  id_rsa.pub >> ~/.ssh/authorized_keys

如果有修改配置/etc/ssh/sshd_config,需要重启ssh服务器

/etc/init.d/ssh restart

 

客户端通过私钥登录ssh服务器

ssh命令

ssh -i /blue/.ssh/id_rsa blue@

scp命令

scp -i /blue/.ssh/id_rsa filename blue@:/blue

每次敲命令,都要指定私钥,是一个很繁琐的事情,所以我们可以把私钥的路径加入ssh客户端的默认配置里

修改/etc/ssh/ssh_config

#其实默认id_rsa就已经加入私钥的路径了,这里只是示例而已
IdentityFile ~/.ssh/id_rsa
#如果有其他的私钥,还要再加入其他私钥的路径
IdentityFile ~/.ssh/blue_rsa

其他应用场景

SecureCRT密钥key远连接程ssh证书登录Linux

  国内大部分人用的系统是windows,而windows下有很多ssh客户端图形工作,最流行,功能最强大的就是SecureCRT了,所以我会单独针对SecureCRT简单讲下实现ssh证书登录Linux的要点,步骤如下:

  1:在SecureCRT创建私钥和公钥:主菜单->工具->创建公钥->选择RSA->填写私钥的密码->密钥长度填为1024->点击完成,生成两个文件,默认名为identity和identity.pub

  2.把私钥和公钥转换为OpenSSH格式:主菜单->工具->转换私钥到OpenSSH格式->选择刚生成私钥文件identity->输入私钥的密码->生成两个文件,指定为id_rsa,id_rsa.pub 

  3.把公钥id_rsa.pub上传到ssh服务器,按照之前配置服务器端的证书,再配置一次。

  另外,如果你之前用windows的 SecureCRT的证书登录linux的,有一天你换成了linux,并希望通过原来的私钥登录公司的服务器,那么可以把id_rsa拷贝倒~/.ssh/目录下,配置ssh客户端参考上文。

  备注:ssh对证书的文件和目录权限比较敏感,要么根据出错提示设置好文件和目录权限,要么是把StrictModes选项设置为no

hadoop部署的无密码ssh登录

hadoop要求master要无密码跳转到每个slave,那么master就是上文中的ssh客户端了,步骤如下

   在hadoop master上,生成公钥私钥,这个场景下,私钥不能设置密码。

   把公钥上传到每个slave上指定的目录,这样就完成了ssh的无密码跳转了。

总结

ssh证书登录,在实际工作才是最常用的登录方式,本人结合了真正工作的场景普及了ssh证书登录的知识,并根据流行的hadoop部署和windows下最常用的SecureCRT实例讲解了证书登录。




配置SSH证书登录验证



1)先添加一个维护账号:msa 
2)然后su - msa
3)ssh-keygen -t rsa 指定密钥路径和输入口令之后,即在/home/msa/.ssh/中生成公钥和私钥:id_rsa id_rsa.pub
4)cat id_rsa.pub >> authorized_keys 至于为什么要生成这个文件,因为sshd_config里面写的就是这个。 然后chmod 400 authorized_keys,稍微保护一下。 
5)用psftp把把id_rsa拉回本地,然后把服务器上的id_rsa和id_rsa.pub干掉 
6)配置/etc/ssh/sshd_config 
   Protocol 2 
   ServerKeyBits 1024 
   PermitRootLogin no #禁止root登录而已,与本文无关,加上安全些 

 #以下三行没什么要改的,把默认的#注释去掉就行了 
  RSAAuthentication yes 
  PubkeyAuthentication yes 
  AuthorizedKeysFile .ssh/authorized_keys 
  PasswordAuthentication no PermitEmptyPasswords no 
7)重启sshd /sbin/service sshd restart
8)转换证书格式,迁就一下putty 运行puttygen,转换id_rsa为putty的ppk证书文件 
9)配置putty登录 在connection--SSH--Auth中,点击Browse,选择刚刚转换好的证书。 然后在connection-Data填写一下auto login username,例如我的是msa 在session中填写服务器的IP地址,高兴的话可以save一下
10)解决一点小麻烦 做到这一步的时候,很可能会空欢喜一场,此时就兴冲冲的登录,没准登不进去: No supported authentication methods available 这时可以修改一下sshd_config,把 PasswordAuthentication no 临时改为: PasswordAuthentication yes 并重启sshd 这样可以登录成功,退出登录后,再重新把PasswordAuthentication的值改为no,重启sshd。 以后登录就会正常的询问你密钥文件的密码了,答对了就能高高兴兴的登进去。



ssh信任关系,是指一台服务器上的一个用户信任客户端的一个用户,允许这个用户不输入密码登录,另一个说法叫做public_key_auth。实际上就是证书信任。

  首先,需要为被信任的用户创建一个证书。运行下面的命令:

  ssh-keygen -t rsa
  将会在~/.ssh目录下生成两个文件,id_rsa和id_rsa.pub,分别是私钥和公钥。注意id_rsa文件的权限必须是600。

  然后,到服务器用户的~/.ssh目录下,创建一个文件authorized_keys(如果已经有了,直接编辑),把id_rsa.pub里的内容(只有一行文本)加到文件里面保存。

  好了,这样在客户端运行 ssh username@remotehost就可以不输入密码直接登录了 



两台机器 linux1   linux2

linux1执行

#cd ~
#ssh-keygen -t rsa
#scp .ssh/id_rsa.pub linux2:~/.ssh/


到linux2执行

#cd ~/.ssh
#cat id_rsa.pub >>.ssh/authorized_keys
#chmod 644 authorized_keys
#ssh-keygen -t rsa
#mv id_rsa.pub id_rsa.pub2
#scp .ssh/id_rsa.pub2 linux1:~/.ssh/


再回到linux1执行
#cd ~/.ssh
#cat id_rsa.pub2 >>.ssh/authorized_keys

这样两台机器的ssh信任就配置好了,互相访问就不需要输入密码了 





linux SecureCRT ssh key认证登陆


通过SecureCRT创建key登录认证


一、生成公钥/密钥对


使用SecureCRT    工具->创建公钥 即可,加密算法选择RSA,因为sshd配置文件中选择了RSA算法





 客户端通过私钥登录ssh服务器


客户端通过私钥登录ssh服务器


客户端通过私钥登录ssh服务器



这一步中,通行短语可以不输入。但要求输入,登陆的时候会要求你输入通行短语。


并修改Comment 相关信息,采用   个人账户名称@服务器信息 方式


(可以所有的服务器都使用一个密钥对)


客户端通过私钥登录ssh服务器 






填写密钥长度,默认是1024


客户端通过私钥登录ssh服务器


注意保存好密钥对,建议使用手机保存


这里选择生成的密钥使用 OpenSSH Key 格式。如果选择默认的格式,上传到服务器的时候需要执行格式转换的工作,需要通过命令行来连接的也需要通过securecrt来转换私钥为openssh格式,这里建议采用openssh key格式!


点击完成后会生成两个文件,默认是IdentityIdentity.pub,其中Identity为私钥,Identity.pub为公钥。


 


 


二、服务器端的配置


上传Windows客户机SecureCRT生成的公钥 Identity.pub到用户home目录下.ssh文件夹中,一般是用ftp上传.注意上传之前,一定要以ASCII格式上传。


以本人用户为例


cd /home/yangzg


mkdir .ssh  #在需要开启ssh连接的用户目录下建立 .ssh目录


chmod 700 .ssh


cd .ssh


mv Identity.pub authorized_keys  #如果采用的格式不是openssh的话,就需要执行ssh-keygen -i -f Identity.pub >>authorized_keys 命令进行格式转换



chmod 644 .ssh/authorized_keys


 


              更改ssh配置文件


vim /etc/ssh/sshd_config #修改,确认 ssh配置文件


PermitRootLogin no                       #禁止root登录


PubkeyAuthentication yes                  #启用公告密钥配对认证方式


AuthorizedKeysFile .ssh/authorized_keys


RSAAuthentication yes                    #允许RSA密钥


PasswordAuthentication no                #禁止密码验证登录,如果启用的话,OpenSSH RSA认证登录就没有意义了。


重新加载sshd服务,使用/etc/init.d/ssh restart即可


到此,设置完成。可能通过新建会话来检验,在SecureCRT中新建会话时选择使用公钥认证即可,去掉密码验证,做登陆验证。


客户端通过私钥登录ssh服务器 



    


登陆测试,输入密钥通行短语,看看是否登录成功!如果登录不成功请从下面几个方面查看:


Ø  权限是否是644


Ø  属主是否正确


Ø  选择创建密钥的时候选择的是否是openssh,如果不是需要转换格式


                  


 


三、采用命令行方式通过证书登录的设置


Ø  采用的openssh格式的证书的配置


直接将私钥Identity传输到对应的.ssh目录,比如传输到/home/zhangxy/.sshchmod 600 /home/zhangxy/.ssh/Identity


ssh -i /home/zhangxy/.ssh/Identity zhangxy@172.16.88.11  输入通行短语就可以连接进去了


Ø  采用标准公钥和VanDyke私钥格式的配置


先将私钥转化成openssh格式


客户端通过私钥登录ssh服务器






转换后将Identity私钥转换到对应的.ssh目录,后面的操作和前面一样,这里就不赘述了!


 


 


四、Purry使用SecureCRT的私钥做证书登录配置


Ø  采用openssh格式的putty证书配置


直接利用puttygen.exe导入私钥,生成证书





 客户端通过私钥登录ssh服务器


导入后点击save private key保存证书就可以了!


打开purry,选择上一步创建的证书


客户端通过私钥登录ssh服务器






配置完成,连接服务器看是否OK


 


Ø  采用标准公钥和VanDyke私钥格式的putty证书配置


需要先将私钥转换为openssh格式,后面的操作和openssh格式的putty证书配置一样,这里不再赘述!



0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有