您的位置:首页 > 其它

ssh 实现无密码登陆

2014-09-17 15:24 274 查看
ssh无密码登陆原理

公钥认证:公钥认证是使用一对加密字符串,一个为公钥,一个为私钥。公钥可以被任何人获得,私钥只有自己知道,公钥加密之后的字符串只有私钥能解密。所以如果A和B之间进行加密通信,则可以A和B相互把自己的公钥发送给对方,如A要向B发送信息,则A使用B的公钥对要发送的信息进行加密,B收到之后,用B自己的私钥解密;同样,如果B要向A发送消息,则B使用A的公钥加密消息,A收到之后用A自己的私钥解密。

记 Ac = 客户端公钥, Bc = 客户端密钥 , As = 服务器公钥, Bs = 服务器密钥。在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。
认证过程分为两个步骤。

会话密钥(session key)生成

客户端请求连接服务器,服务器将 As 发送给客户端。
服务器生成会话ID(session id),设为 p,发送给客户端。
客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
客户端将 r 用 As 进行加密,结果发送给服务器。
服务器用 Bs 进行解密,获得 r。
服务器进行 r xor p 的运算,获得 q。
至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。

认证

服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端
客户端使用 Bc 解密 S(x) 得到 x
客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
服务器计算 q + x 的 md5 值 m(q+x)
客户端将 n(q+x) 发送给服务器
服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

服务器端设置

使用公钥认证需要对服务器进行一些设置。修改 /etc/sshd_config 的以下配置。

RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥认证

PasswordAuthentication no # 禁止密码认证

然后重新启动 sshd。

实现无密码登陆

客户机 ip_client

服务器 ip_server

需要实现在客户机上不用密码登陆服务器。

1. 客户机上生成 ssh 公私密钥

ssh-keygen -t rsa

一直enter进行默认选项

此时生成私钥 ~/.ssh/id_rsa 以及公钥 ~/.ssh/id_rsa.pub

2. 将客户机上生成的公钥拷贝到服务器中需要登陆的用户名下的 ~/.ssh/authorized_keys文件中

scp id_rsa.pub(in client) --> server

在服务器上 cat id_rsa.pub >> ~/.ssh/authorized_keys

或者在客户机上使用: ssh-copy-id user_name@server_ip.

3.更改权限,在服务器server上

chmod 644 ~/.ssh/authorized_keys

chmod 700 ~/.ssh

4. 在客户机上将私钥添加给ssh-agent 管理

ssh-agent bash //开启ssh-agent

ssh-add ~/.ssh/id_rsa //把专用密钥添加到 ssh-agent 的高速缓存中

5.从客户机上登陆 服务器

ssh test_user@ip_server 就可以不输入密码直接登陆

(ssh-agent介绍)

ssh-agent就是一个管理私钥的代理,受管理的私钥通过ssh-add来添加,所以ssh-agent的客户端都可以共享使用这些私钥。

好处1:不用重复输入密码。

用 ssh-add 添加私钥时,如果私钥有密码的话,照例会被要求输入一次密码,在这之后ssh-agent可直接使用该私钥,无需再次密码认证。

好处2:不用到处部署私钥

假设私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。可以通过在 A 上部署私钥或者设置 PortForwarding 登录 B,也可以转发认证代理连接在 A 上面使用ssh-agent私钥登录 B。 编缉/etc/ssh/ssh_config文件:ForwardAgent yes

linux ssh客户端密钥转发

如果是linux客户端,从linux客户端的ssh跳转过去时,一般我们会执行命令

ssh blue@跳板机ip

然后我们在跳本机上跳转到目标机器

ssh blue@目标机器ip

跳板机ip和目标机器ip,blue账户下已经在相应的.ssh/authorized_keys加入了公钥,配置是没有问题了,但是我们会遇到一个错误,叫Pubkey Unauthorization,因为跳板机没有blue的私钥。问题总是会有,解决方法也总是有,ssh是有转发密钥的功能,所以我们从本机跳转到跳板机是,可以把私钥转发过去。

所以正确做法是,在本机linux客户端执行命令

ssh -A blue@跳板机ip

-A表示转发密钥,所以跳转到跳板机,密钥也转发了过来。

接下来我们再在跳板机执行命令

ssh -A blue@目标机器ip

这里的-A参数非必要,如果你不需要从目标机器跳转到其他目标机器,也不需要继续转发密钥了。

另外可以配置本机客户端的默认配置文件,修改为默认转发密钥:

修改ssh_config(不是sshd_config,一般在/etc或者/etc/ssh下):把#ForwardAgent no改为ForwardAgent Yes

跳板机是否需要配置,同理参考你的需要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: