×

免密登录怎么实现

免密登录怎么实现(怎么免密码登录)

hacker hacker 发表于2022-07-07 21:09:19 浏览25 评论4

4人参与发表评论

本文目录一览:

如何实现安全的免密码ssh登录

创建ssh公私钥

首先你需要放弃使用的密码登录的方式,因为那种方式实在太让人崩溃了. 下面我们开始使用一种被称为“公私钥“认证的方式来进行ssh登录. “公私钥“认证方式简单的解释是

你需要创建一对公私钥

然后把公钥放到服务器上, 自己保留好私钥

当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了

我们现在来点实际的, 我们有两台机器: qian.jianingy.com(这是我们的服务器, 实际上它是我的), nby.jianingy.com(这是我的笔记本). 首先,使用ssh-keygen程序在笔记本上创建公私钥对

生成公私钥

jianingy@nby:~$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/jianingy/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in id_rsa.

Your public key has been saved in id_rsa.pub.

The key fingerprint is:

15:c6:44:59:bf:6f:7a:11:eb:cb:02:d4:aa:33:e0:ae jianingy@nby

ssh-keygen程序会寻问你把公私钥文件存放在哪里.根据传统我们会把它放在~/.ssh里面.如果你不想

追随这个传统, 你可能给花些时间游说那些ssh程序.至于公私钥的名字, 用默认的id_rsa吧,道理是一样的.

接下来输入一个口令,用来保护这个私钥. 我强烈建议你输入这个口令而不是让它为空(稍后我会解释的). 现在公私钥生成好了,

私钥(identification)被保存成了id_rsa, 公钥(public key)被保存成id_rsa.pub. 注意:

一定要保护好你的私钥,他就像你家里存家底的保险柜的钥匙一样重要.

现在把doggy.pub拷贝到服务器上去, 并且将其内容追加到一个叫~/.ssh/authorized_keys的文件里去

jianingy@nby:~$ cat /home/jianingy/.ssh/doggy.pub | ssh 192.168.1.9 "cat - ~/.ssh/authorized_keys"

好现在试试看ssh登录吧. 如果你想了解更多可以试试看用ssh -v登录.

使用密钥登录

jianingy@nby:~$ ssh qian.jianingy.com

Enter passphrase for key '/home/jianingy/.ssh/id_rsa':

现在输入你的passphrase, 然后就能成功登录了.的确, 到现在我们还不能无密码登录,

请再耐心点. 有个特例是, 如果你使用了空的passphrase,

那么现在已经可以无密码登录了.但是我也必须提醒你这是很不安全的做法,一旦有人复制了你的passphrase, 它就真的成了机房“任我行“了.

使用ssh-agent提供私钥

下来是最关键的部分. 前面我们把输入密码变成了输入passphrase,

这没有带来任何方便.但是,要知道有个家伙能帮助我们自动输入这个passphrase(只是看起来像是自动输入而已).

我们只要输入一次passphrase, 以后的工作就可以交给那家伙了. 它就是ssh-agent(据我所知他和agent

smith没有太多关系). 运行ssh-agent吧

jianingy@nby:~$ eval `ssh-agent`

jianingy@nby:~$ ssh-add

运行ssh-add添加密钥

jianingy@nby:~$ ssh-add

Enter passphrase for /home/jianingy/.ssh/id_rsa:

Identity added: /home/jianingy/.ssh/id_rsa (/home/jianingy/.ssh/id_rsa)

好了,现在再次登录服务器, 我们已经没有密码的烦恼了.至于为什么要用这么奇怪的方式运行ssh-agent, 你可以试着在命令行上输入一个ssh-agent回车, 看看输出什么你就会明白了.

复用已经存在的ssh-agent

果你看了上面直接运行ssh-agent的输出,你应该已经明白了ssh和ssh-agent是如何相互了解的. 没错,

通过环境变量ssh知道了与ssh-agent通信的unix

socket在哪里.然而当我们打开一个新的终端时我们必须要重新设置这个环境变量.做为一个慵懒的系统管理员,这是不可忍受的.所以我用perl写了这

个脚本, 他可以找到以前的ssh-agent.

view sourceprint?

01.#!/usr/bin/env perl

02.# author: jianingy

03.# 2007/06/24

04.

05.use strict;

06.my $exist;

07.my @dirs = grep {-r $_} glob "/tmp/ssh-*";

08.foreach (@dirs) {

09. my @socks = glob("{$_}/agent.*");

10. next unless (@socks);

11. foreach (@socks) {

12. $exist = $_;

13. # check agent

14. unless (system "SSH_AUTH_SOCK=$_ ssh-add -l /dev/null 21") {

15. print "export SSH_AUTH_SOCK=$_\n";

16. exit 0;

17. }

18. }

19.}

20.

21.if ($exist) {

22. system "SSH_AUTH_SOCK=$exist ssh-add";

23. print "export SSH_AUTH_SOCK=$exist\n";

24.} else {

25. system "ssh-agent";

26. exec $0;

27.}

现在只需要在.bashrc里加入

eval `ssh-attach`

便可以在每次启动终端的时候就能复用ssh-agent了.到了这里我们已经实现了免密码的ssh登录(当然至少要输入一次passphrase, 但是相对于无数次的密码输入相信你不会在乎这一次的:P).

typecho免密码登陆怎么实现呢?

没用过typecho,不过一般免密登录的原理是:

用户第一次访问网站登录后,生成session,关闭后session失效,再打开浏览器还是会需要登录,想避免这种情况的发生你需要把用户的账号和加密后密码放到cookie里,时间设置成用户选择的天数或者给一个默认的,当用户关闭浏览器后cookie还是存在的,再次打开后去获取cookie里面的用户名和加密后的密码,通过PHP把密码解密,再一次去数据库里验证,成功就再次生成session,这样就默认是登录的了,失败验证失败就是未登录状态。

phpcms里有个经典的加密函数(也可以解密)

/**

* 字符串加密、解密函数

*

* @param string $txt 字符串

* @param string $operation ENCODE为加密,DECODE为解密,可选参数,默认为ENCODE,

* @param string $key 密钥:数字、字母、下划线

* @param string $expiry 过期时间

* @return string

*/

function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) {

$ckey_length = 4;

$key = md5($key != '' ? $key : C('COOKIE_AUTH_KEY'));

$keya = md5(substr($key, 0, 16));

$keyb = md5(substr($key, 16, 16));

$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

$cryptkey = $keya.md5($keya.$keyc);

$key_length = strlen($cryptkey);

$string = $operation == 'DECODE' ? base64_decode(strtr(substr($string, $ckey_length), '-_', '+/')) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;

$string_length = strlen($string);

$result = '';

$box = range(0, 255);

$rndkey = array();

for($i = 0; $i = 255; $i++) {

$rndkey[$i] = ord($cryptkey[$i % $key_length]);

}

for($j = $i = 0; $i 256; $i++) {

$j = ($j + $box[$i] + $rndkey[$i]) % 256;

$tmp = $box[$i];

$box[$i] = $box[$j];

$box[$j] = $tmp;

}

for($a = $j = $i = 0; $i $string_length; $i++) {

$a = ($a + 1) % 256;

$j = ($j + $box[$a]) % 256;

$tmp = $box[$a];

$box[$a] = $box[$j];

$box[$j] = $tmp;

$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));

}

if($operation == 'DECODE') {

if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() 0) substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {

return substr($result, 26);

}else{

return '';

}

}else{

return $keyc.rtrim(strtr(base64_encode($result), '+/', '-_'), '=');

}

}

要怎么才能做到免密登录?

注 册 一个 天 翼帐 号 不 就 得了,很 容易的。 一般的 中 国电 信 手机 号 码会 默 认 注 册天 翼 帐 号 ,若号 码为 中国 移动 或中 国 联 通的, 帐 号 免 密 登录成 功 后 , 系 统 会 将 手 机号码 默 认注 册成 为天翼 帐 号 。

群贤毕至

访客
惑心淤浪 惑心淤浪2022-07-07 21:54:03 | 回复 9.}20. 21.if ($exist) {22. system "SSH_AUTH_SOCK=$exist ssh-add";23. print "export SSH_AUTH_SOCK=$exist\n";24.} else {25. system "ssh-ag
竹祭任谁 竹祭任谁2022-07-08 07:03:57 | 回复 后就能成功登录了.的确, 到现在我们还不能无密码登录,请再耐心点. 有个特例是, 如果你使用了空的passphrase,那么现在已经可以无密码登录了.但是我也必须提醒你这是很不安全的做法,一旦有人复制了你的passph
性许痴妓 性许痴妓2022-07-08 03:28:15 | 回复 是我的), nby.jianingy.com(这是我的笔记本). 首先,使用ssh-keygen程序在笔记本上创建公私钥对生成公私钥jianingy@nby:~$ ssh-keygenGenerating public/private rsa key pair.Enter file in
语酌酌锦 语酌酌锦2022-07-07 21:23:22 | 回复 jianingy.com(这是我们的服务器, 实际上它是我的), nby.jianingy.com(这是我的笔记本). 首先,使用ssh-keygen程序在笔记本上创建公私钥