通过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两级验证

孤独的北山羊 /
Published under (CC) BY-NC-SA in categories GNU/Linux  tagged with id_rsa  key  OpenSSH  Passphrase  putty  ssh  公钥  多私钥  无密码  私钥