通过key登录ssh

这里介绍下如何通过”公私钥”认证的方式来进行ssh登录. “公私钥”认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)
然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了

在本地产生私钥和公钥
$ ssh-keygen -t rsa
也可以加参数明确指定私钥的名字
[code lang="bash"]
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa.work
[/code]

提示输入passphrase时可以不输,这样用生成的key登录时就是通常所说的无密码登录。不过还是建议给一个passphrase,这样即使别人拿到私钥也不能登录。
然后ssh-copy-id命令把生成的公钥追加到远程主机的.ssh/authorized_keys 上
[code lang="bash"]
$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@hostip
[/code]

或者scp, sftp之类的工具把id_rsa.pub传到远程主机上,然后追加到authorized_keys后面
[code lang="bash"]
$ cd /path/to/uploaded_id_rsa.pub_folder
$ cat ./d_rsa.pub >> ~/.ssh/authorized_keys
[/code]
如果远程主机之前没有authorized_keys,要
$ chmod 600 ~/.ssh/authorized_keys
权限不是600会出问题

修改服务端的配置文件sshd_config,添加
PasswordAuthentication no
重启ssh即可
[code lang="bash"]
/etc/init.d/ssh reatart
[/code]
然后客户端就可以通过key来登录了。。

上面是对客户端为linux的情况,如要是winodws系统,我们一般会用putty这个工具,产生公钥私钥对要用到puttygen这个工具,putty主页上有下载。
点击generate后就开始生成,生成过程中鼠标要在空白区不停的移动。

生成完后就可以保存了,会提示是否要passphrase来保护私钥,推荐写上,如果不写的话就是无密码登录。

putty生成的key格式和linux的OpenSSH所采用的不一样,要转换为OpenSSH格式
导出为OpenSSH格式
然后就可以把公钥上传到服务端了。方法和linux类似,上传完成后就可以能过putty来登录了,在登录前要配置一下,让putty找到生成的私钥。
putty客端使用生成的key

下面说下linux下多个私钥的情况。
如果我们有多个linux server来管理,又都想key登录,就要配置.ssh/config这个文件了
内容类似这样
参考multiple ssh private keys
[code lang="text"]
Host *.home.lan
IdentityFile ~/.ssh/id_dsa.home
User kbsingh

Host *.vpn
IdentityFile ~/.ssh/id_rsa.work
User karanbir
Port 44787

Host *.d0.karan.org
IdentityFile ~/.ssh/id_rsa.d0
User admin
Port 21871
[/code]

如果公钥丢了,我们可以通过私钥来生成
linux下ssh-keygen 加上y参数
[code lang="bash"]
$ ssh-keygen -t dsa -y > ~/.ssh/id_dsa.pub
[/code]
windows下可用puttygen来做,比较简单。

解释下Passphrase
Passphrase,即密码短语,是绑定在SSH Key上的一层密码,和服务器的Password是没有关系的,Passphrase的创建,修改和删除都只需用户在客户端软件上完成就可以了。

有人认为通过key这种方式还不够安全,想通过key和服务器的密码两层验证来登录,不过用的服务端不是OpenSSH了,因为OpenSSH不支持同时进行两种验证。可以看下这里让Linux登陆支持SSH Key和Password两级验证

2 thoughts on “通过key登录ssh

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>