曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 8254|回复: 0
打印 上一主题 下一主题

[系统应用] Dropbear 使用公钥/私钥进行连接

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2015-9-16 16:10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有时为了更加安全的缘故,我们舍弃了基于用户名和密码的认证,而采用公钥/私钥的认证方式。这种认证方式的好处是:
  • 不需要再输入密码
  • 登录系统更加轻松
  • 不用担心人家看你手指录入密码而被记住
  • 不用再发送加密后的密码到 OpenWrt
  • 不用担心被中途截获密码
  • 更爽的是,可以关闭基于用户名和密码的认证方式了
  • 也不用害怕被黑客在 Openwrt 上猜到你的密码了


诸多好处,为啥我们不用这种认证方式呢?

官网的教程在这里:http://wiki.openwrt.org/oldwiki/ ... authenticationhowto

但这里我结合一下实际情况做些说明,不然可能会令你走些弯路。

官网上有说到用 puttygen.exe 来生成密钥对,这个在我这边的测试情况来看,似乎不被 Dropbear 所接受,可能会看到提示 “server refused our key” 。那还是按照我的步骤来,至少稳妥点。

1. 先在一台 linux 机器上,运行:
  1. ssh-keygen -t dsa
复制代码

来生成基于 DSA 算法的密钥对。生成过程中会提示你是否输入密码短句(passphrase),为了更加安全的缘故,我的建议是要输入一个,虽然留空也是可以的。

生成的密钥对存放在你家目录的 .ssh 目录下。公钥叫 id_dsa.pub ,私钥叫 id_dsa 。如果你要在 windows 上用 putty 来登录,那么将私钥拷贝到 windows 上,下面我说明的也是如何用 putty 来通过导入私钥来登录。

将这个 id_dsa.pub 通过 winscp 或 scp 等工具传到 openwrt 上的任意一个目录下,然后将其复制并重命名到 /etc/dropbear 下,改名为 authorized_keys 。注意还得改下权限,否则可能会看到 “服务器无法使用 key 文件的提示”。
  1. chmod 0600 authorized_keys
复制代码


2. 转换私钥

由于私钥是在 linux 上生成的,不能直接使用 putty 将其导入使用,因此还得先通过 puttygen 对其转换。打开 puttygen ,单击菜单栏上的 "Conversions",然后在下来的 "Import Key",这样就能将私钥转换了。如果之前的私钥是使用过密钥短语的话,那么在转换时也会提示你再次输入该短语。

3. 连接

私钥转换完毕后,就可以通过 putty 导入并进行连接了。

打开 putty,在 “会话” 连填入 IP 地址和端口号是必须的。

然后,填入“自动登录用户名”,如下图所示:

对于 OpenWrt 来说,一般就是 root 。

最后,在 “认证” 里导入被转换过的私钥,如下图所示:


好了,可以愉快的连接,如果不出意外的话,会看到这样的登录提示:
Using username "root".
Authenticating with public key "imported-openssh-key"
Passphrase for key "imported-openssh-key":

对了,这里还是得像密码那样输入之前设定的短语。

这似乎和用密码来登录没什么区别(主要是不简便),但这毕竟要比密码安全了许多。这个登录方式是搞定了,但别忘了,去掉 Dropbear 的密码连接方式:
root@OpenWrt:~# uci set dropbear.@dropbear[0].PasswordAuth=off
root@OpenWrt:~# uci commit dropbear

如果你是要从 wan 来登录的,那么得设置下防火墙:
root@OpenWrt:~# uci add firewall rule
root@OpenWrt:~# uci set firewall.@rule[-1]._name=SSH
root@OpenWrt:~# uci set firewall.@rule[-1].src=wan
root@OpenWrt:~# uci set firewall.@rule[-1].target=ACCEPT
root@OpenWrt:~# uci set firewall.@rule[-1].proto=tcp
root@OpenWrt:~# uci set firewall.@rule[-1].dest_port=22
root@OpenWrt:~# uci commit firewall
root@OpenWrt:~# /etc/init.d/firewall restart

用 iptables 来添加:
iptables -t nat -A prerouting_wan -p tcp --dport 22 -j ACCEPT
iptables        -A input_wan      -p tcp --dport 22 -j ACCEPT

对了,上面登录时还是要提示输入密码短语,但我们可以通过 ssh 代理(ssh-agent)来帮我们记住这个短语。下面我摘抄一段网上的方法:

登陆管理服务器
[root@server ~]# ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2148; export SSH_AGENT_PID;
echo Agent pid 2148;

当你运行ssh-agent,它会打印出来它使用的 ssh 的环境和变量。要使用这些变量,有两种方法,一种是手动进行声明环境变量,另一种是运行eval命令自动声明环境变量。

方法一:手动声明环境变量
[root@server ~]# SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK;
[root@server ~]# SSH_AGENT_PID=2148; export SSH_AGENT_PID;
[root@server ~]# printenv | grep SSH     #检查 ssh 环境变量是否已经加入当前会话的环境变量
SSH_AGENT_PID=2148
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147

方法二:运行eval命令自动声明环境变量
[root@server ~]# eval `ssh-agent`
Agent pid 2157
[root@server ~]# printenv | grep SSH     #检查 ssh 环境变量是否已经加入当前会话的环境变量
SSH_AGENT_PID=2148
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147

现在 ssh-agent 已经在运行了,但是 ssh-agent 里面是空白的不会有解密的专用密钥。我们要告诉它我们有私钥和这个私钥在哪儿。这就需要使用 ssh-add 命令把我们的专用密钥添加到 ssh-agent 的高速缓存中。
[root@server ~]# ssh-add ~/.ssh/id_dsa
Enter passphrase for /home/user/.ssh/id_dsa:     #输入你的密码短语
Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
[root@server ~]# ssh-add -l     #查看 ssh代理的缓存内容
1024 72:78:5e:6b:16:fd:f2:8c:81:b1:18:e6:9f:77:6e:be /root/.ssh/id_rsa (RSA)

输入了密码短句,现在好了,你可以登录你的远程服务器而不用输入你的密码短语了,而且你的私钥是密码保护的。试试看是不是很爽!
[root@server ~]# ssh peter@192.168.0.2
Last login: Sun Oct 10 11:32:45 2010 from 192.168.0.1
[peter@client ~]$

登陆服务器进行操作结束后,记得还要把 ssh-agent 关掉,不然其他人登陆后也可以远程了。
[root@server ~]# ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 2148 killed;
[root@server ~]# ssh-add -l     #查看一下,缓存里已经没有了密钥了
The agent has no identities.

下次登陆的时候输入
#ssh-add
输入密码提示
#ssh -Y username@ip

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-1 23:31 , Processed in 0.074917 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表