如果我们希望从localhost主机通过SSH登录remotehost主机,执行如下命令:
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站制作、鄠邑网络推广、小程序开发、鄠邑网络营销、鄠邑企业策划、鄠邑品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供鄠邑建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
ssh username@centos-i1
这是 ssh
处理认证的缺省方式,它会要求我们输入username的密码,如果我们输入密码,ssh
就会用安全密码认证协议,把我们的密码传送给 remotehost进行验证。但是,和 telnet
的情况不同,这里我们的密码是加密的,因此它不会被偷看到我们的数据连接的人截取。一旦 remotehost把我们提供的密码同它的密码数据库相对照进行认证,成功的话,我们就会被允许登录。
为了使用这种认证方式,我们首先得生成一对密钥:一把专用密钥和一把公用密钥。公用密钥用于对消息进行加密,只有拥有专用密钥的人才能对该消息进行解密。公用密钥只能用于加密,而专用密钥只能用于对由匹配的公用密钥编码的消息进行解密。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 认证有两项重要的注意事项。
我们的确只需要生成一对密钥。然后我们可以把我们的公用密钥拷贝到想要访问的那些远程机器上,并进行恰当的认证配置。换句话说,我们并不需要为想要访问的每个系统都准备一对密钥。只要一对就足够了。
专用密钥不应落入其它人手中。正是专用密钥授权我们访问远程系统,任何拥有我们的专用密钥的人都会被授予和我们完全相同的特权。我们应该保护我们的专用密钥以防未授权的使用。
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步骤配置完成后,就可以通过ssh和scp命令在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的使用方法,可以看参考文献。
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公用密钥的安装又是几乎和 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/