温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SSH无密码登录方法及对应的机制

发布时间:2020-06-20 16:50:16 来源:网络 阅读:678 作者:leesbing 栏目:安全技术

 

缺省方式

如果我们希望从localhost主机通过SSH登录remotehost主机,执行如下命令:

ssh username@centos-i1

这是 ssh 处理认证的缺省方式,它会要求我们输入username的密码,如果我们输入密码,ssh 就会用安全密码认证协议,把我们的密码传送给 remotehost进行验证。但是,和 telnet 的情况不同,这里我们的密码是加密的,因此它不会被偷看到我们的数据连接的人截取。一旦 remotehost把我们提供的密码同它的密码数据库相对照进行认证,成功的话,我们就会被允许登录。

通过TSARSA的公私密钥认证方式

为了使用这种认证方式,我们首先得生成一对密钥:一把专用密钥和一把公用密钥。公用密钥用于对消息进行加密,只有拥有专用密钥的人才能对该消息进行解密。公用密钥只能用于加密,而专用密钥只能用于对由匹配的公用密钥编码的消息进行解密。RSA(和 DSA)认证协议利用密钥对的这些特殊性质进行安全认证,并且不需要在网上传输任何保密的信息。

然后把公用密钥拷贝到 remotehost。公用密钥之所以被称作是“公用的”有一个原因是因为它只能用于对那些给我们的消息进行加密,所以我们不需要太担心它会落入其它人手中。一旦我们的公用密钥已经被拷贝到 remotehost 中,并且为了让remotehost sshd 能够定位它而把它放在一个专门的文件(~/.ssh/authorized_keys)里,我们就为使用 RSA 认证登录到 remotehost 上做好了准备。

要用 RSA 登录的时候,就象我们常做的一样,我们只要在 localhost 的控制台键入ssh username@centos-i1。但是这一次,ssh 告诉 remotehost sshd 它想使用 RSA DSA认证协议。Remotehost sshd 会生成一个随机数,并用我们先前拷贝过去的公用密钥对这个随机数进行加密。然后, sshd 把加密了的随机数发回给正在 localhost 上运行的 ssh。接下来,轮到localhost ssh 用专用密钥对这个随机数进行解密后,再把它发回给 remotehost,实际上等于在说:“瞧,我确实有匹配的专用密钥;我能成功的对您的消息进行解密!”。这样remotehost sshd 得出结论,既然我们持有匹配的专用密钥,就应当允许我们登录。

两项注意事项

关于 RSA DSA 认证有两项重要的注意事项。

  1. 我们的确只需要生成一对密钥。然后我们可以把我们的公用密钥拷贝到想要访问的那些远程机器上,并进行恰当的认证配置。换句话说,我们并不需要为想要访问的每个系统都准备一对密钥。只要一对就足够了。

  2. 专用密钥不应落入其它人手中。正是专用密钥授权我们访问远程系统,任何拥有我们的专用密钥的人都会被授予和我们完全相同的特权。我们应该保护我们的专用密钥以防未授权的使用。

ssh 的开发者们当然知道专用密钥的重要性,而且他们已经在 ssh ssh-keygen 里加入了一些防范措施,以防止我们的专用密钥被滥用。首先,ssh 被设置成了如果我们的密钥的文件权限允许除我们之外的任何人读取密钥,就打印出一条大大的警告消息。其次,在我们用 ssh-keygen 创建公用/专用密钥对的时候,ssh-keygen 会要求我们输入一个密码短语。如果我们输入了密码短语,ssh-keygen 就会用该密码短语加密我们的专用密钥,这样,即使专用密钥被盗,对于那些碰巧不知道密码短语的人而言,这把专用密钥是毫无用处的。

具体配置步骤

以主机centos-i2免密码登录centos-i1为例。

1.在主机centos-i2生成公私密钥

[root@centos-i2 ~]# ssh-keygen   #缺省使用RSA协议,也可以通过-t dsa参数来使用DSA协议

Generating public/private rsa key pair.

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

Enter passphrase (empty for no passphrase):          #此处直接回车

Enter same passphrase again:

Your identification has been saved in/root/.ssh/id_rsa.

Your public key has been saved in/root/.ssh/id_rsa.pub.

The key fingerprint is:

33:3e:b4:b5:bb:76:e3:6d:c9:2a:53:93:24:31:0b:40root@centos-i2

这样就会如程序提示在/home/.ssh目录生成两个文件,分别是公私密钥。

 

2.把生成的公钥文件id_rsa.pub复制到centos-i1主机上

[root@ce[root@centos-i2 .ssh]# scpid_rsa.pub root@centos-i1:/root/.ssh

root@centos-i1's password:           #此时免密码设置还没有配好,所以需要密码

id_rsa.pub                           100%  396    0.4KB/s   00:00  

 

3.在centos-i1主机上配置centos-i2的公钥

[root@centos-i1 .ssh]# cat id_rsa.pub>> authorized_keys

 

上述3步骤配置完成后,就可以通过sshscp命令在centos-i2上免密码ssh登录centos-i1了。示例如下:

[root@centos-i2 .ssh]# ssh root@centos-i1

[root@centos-i2 lb]# scp fio-2.2.10.tar.gzroot@centos-i1:/home/lb

但是,由于步骤一中我们没有使用密码短语来保护私钥,如果私钥被不恰当使用,可能会带来风险。为了避免由此带来的隐患,可以使用ssh-agent。关于ssh-agent的使用方法,可以看参考文献。

DSA协议的配置

DSA 密钥的生成

ssh 协议的版本 1 使用的是 RSA 密钥,而 DSA 密钥却用于协议级 2,这是 ssh 协议的最新版本。目前所有的 OpenSSH 版本都应该既能使用 RSA 密钥又能使用 DSA 密钥。DSA 密钥以如下类似于 RSA 密钥的方式使用 OpenSSH  ssh-keygen 生成:

% ssh-keygen -t dsa

又会提示我们输入密码短语。输入一个安全的密码短语。还会提示我们输入保存 DSA 密钥的位置。正常情况下,缺省的 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub 就可以了。在我们一次性生成 DSA 密钥完成后,就该把我们的 DSA 公用密钥安装到远程系统上去了。

DSA 公用密钥的安装

DSA 公用密钥的安装又是几乎和 RSA 安装完全一样。对于 DSA,我们将要把 ~/.ssh/id_dsa.pub 文件拷贝到 remotehost,然后把它附加到remotehost 上的~/.ssh/authorized_keys2 文件。请注意这个文件的名字和 RSA authorized_keys 文件名不同。一旦配置完毕,输入我们的 DSA 专用密钥的密码短语就应该能登录到 remotehost,而不需要我们输入在 remotehost 上真正的密码。

 

 

 

 

 

 

 

参考文献

https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/index.html

https://www.ibm.com/developerworks/cn/linux/security/openssh/part2/

 


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI