建立口令文件
要想完成A与B之间的无密码SSH访问,需要将请求认证方的SSH口令文件的公钥发送到认证方并且追加到认证文件authorized_keys中。谁要访问别人就把公钥发送给对方。
在这里,如果当前用户已经有公钥文件,说明当前用户有可能已经与其他主机建立免密码访问,可以不用生成口令文件,但也可以生成具有与已存在的口令文件不同名称的另一个口令文件。
使用以下命令确认用户口令文件是否存在
ls ~/.ssh/*.pub
如果没有则使用下面的新建使用DSA加密方式的口令文件。文件存在的话请跳到第三步。
ssh-keygen -t dsa
然后一路回车,使用默认值就可以了。然后使用上面的ls命令就能看见生成的密码文件:私钥id_dsa 公钥id_dsa.pub两个文件。
不知道怎么回事我的机器如果用rsa免密码会没效果
完成验证过程
在~/.ssh目录下使用下面的命令新建一个 authorized_keys 文件。
touch ~/.ssh/authorized_keys
然后使用下面的命令将本机加入到本机的免认证文件中,这样,在本机使用ssh登陆到本机时就不用输入密码了。当然,这步不是必须的。
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
使用下面的命令将文件传送到目标主机。亦可以使用rsync命令等都可以。
scp ~/.ssh/id_dsa.pub 远程用户名@远程IP:/home/远程用户名/
登陆到对方主机,这里需要输入一次密码,然后执行下面的命令。
ssh 远程IP <输入密码>
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
rm ~/id_dsa.pub 删除传过来的公钥文件。
当然,以上操作中若对方主机没有.ssh文件夹,则也需要使用ssh-keygen命令生成,并创建authorized_keys 文件。
更改文件权限
光把公钥文件添加到authorized_keys是不够的,因为ssh进程因为权限不够或者太大,免密码文件不会生效,因此需要使用下面两个命令将authorized_keys文件和.ssh文件夹设置成合适的权限。
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
这两个命令应该在所有的机器上执行。
额外事项
配置过程中学习到了vi等的非交互使用方法。例如
i
this is a line
CTRL+V <ESC>
w
END
复习一下数据加密:
A与B通信,A产生了公钥和私钥以后,把公钥公开(使用scp发给B),以后B向A发送数据就可以使用公钥加密了。
而签名是相反的过程,A产生了公钥和私钥后,私钥作为A身份的证明,用来产生加密数据让公开用户使用公钥查看,从而证明A的身份。