实现liunx之间无密码访问——ssh密匙
环境描述
两台 linux 服务器 172.16.1.22[client],172.16.1.33[server],想要实现 client 服务器 ssh 无密码访问 server 服务器。
使用技术 linux 的 ssh 密匙,加密方式选 rsa|dsa 均可以,默认 dsa。
配置过程
1. 登录 client 机器,生成密匙文件和私匙文件
1) 进入当前用户根目录下的隐藏目录 .ssh 下
[root@client ~]# cd ~/.ssh
2) 生成 client 服务器的私钥和公钥
1 2 3 4 5 6 7 8 9 | [root@client ~]# ssh-keygen -t rsa <----ssh-keygen -t dsa 表示加密算法未dsa,后续生成文件对应显示dsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <---按enter,生成密匙默认保存在该目录下 Enter passphrase (empty for no passphrase): <---按enter Enter same passphrase again: <---按enter 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: ec:df:3d:c4:0f:9c:6d:c6🇪🇨fd:fc:d3:63:e0🏎43 root@tesb |
将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub 或 id_dsa,id_dsa.pub
3) 查看生成密匙文件
1 2 3 4 5 6 7 | [root@client .ssh]# ll -a 总计 20 drwx------ 2 root root 4096 05-20 10:29 . drwx------ 18 root root 12288 2015-10-19 .. -rw------- 1 root root 1675 05-20 10:29 id_rsa -rw-r--r-- 1 root root 391 05-20 10:29 id_rsa.pub -rwx------ 1 root root 788 2015-11-05 known_hosts |
2. 将 .pub 文件复制到 Server 机器的 ~/.ssh 目录下, 并添加到 authorized_keys 文件中
1) 若 server 机器上 ~/.ssh 目录下不存在 authorized_keys 文件
[root@client .ssh]# scp id_rsa.pub root@172.16.1.33:~/.ssh/authorized_keys <--- 注意:此时尚未建立信任,远程传输还是需要密码滴;scp:command not found 参考下方异常处理
2) 若 server 上已经配置过其他的 authorized_keys 文件
[root@server .ssh]# cat id_rsa.pub >> authorized_keys
检查 server 服务器端,~/.ssh 目录下是否存在authorized_keys 文件,且文件中包含.pub 中信息。
3. 设置文件和目录权限,注意是 server 端
[root@server .ssh]# chmod 600 authorized_keys #设置 authorized_keys 权限
[root@server ~]# chmod 700 -R .ssh #设置.ssh 目录权限
4. 大功告成,从 Client 机器登录 Server 机器的目标账户,不再需要密码了
[root@client .ssh]# ssh 172.16.1.33
延伸 -双向登陆的操作过程:
1、ssh-keygen 做密码验证可以使在向对方机器上 ssh ,scp 不用使用密码. 具体方法如下:
2、两个节点都执行操作:#ssh-keygen -t rsa
然后全部回车, 采用默认值.
3、这样生成了一对密钥,存放在用户目录的 ~/.ssh 下。
将公钥考到对方机器的用户目录下 ,并将其复制到 ~/.ssh/authorized_keys 中(操作命令:#cat id_dsa.pub >> ~/.ssh/authorized_keys )。
4、设置文件和目录权限:
设置 authorized_keys 权限
$ chmod 600 authorized_keys
设置.ssh 目录权限
$ chmod 700 -R .ssh
5、要保证.ssh 和 authorized_keys 都只有用户自己有写权限。否则验证无效。
注意事项
1、文件和目录的权限千万别设置成 chmod 777. 这个权限太大了,不安全,关键是密匙不生效了。
2、生成的 rsa/dsa 签名的公钥是给对方机器使用的。公钥内容集中拷贝到远程机器的 authorized_keys 文件中。
3、linux 之间的访问直接 ssh 机器 ip
4、某个机器生成自己的 RSA 或者 DSA 的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和 authorized_keys 权限),这个目标机就能被生成数字签名的机器无密码访问了
异常处理:
1.Client 端,仍然在.ssh 目录下,执行命令:
ssh-add id_rsa
系统如果提示:Identity added: id_rsa (id_rsa) 就表明加载成功了
下面有几个异常情况处理:
1) 如果系统提示:could not open a connection to your authentication agent
则需要执行一下命令:ssh-agent bash
然后再执行上述的 ssh-add id_rsa 命令
2) 如果系统提示 id_rsa: No such file or directory
这是系统无法找到私钥文件 id_rsa,需要看看当前路径是不是不在.ssh 目录,或者私钥文件改了名字,例如如果建立的时候改成 aa_rsa,则这边命令中也需要相应改一下
3) 如果系统提示 command not found,那肯定是你命令敲错字符了
4) 如果提示 Agent admitted failure to sign using the key,私钥没有加载成功,重试 ssh-add
注意 id_rsa/id_rsa.pub 文件不要删除,存放在.ssh 目录下
2. 无法实现无密码访问,可能是权限设置不对,重新检查下权限
注意 $ chmod 700 -R .ssh #设置.ssh 目录权限,不要漏掉 -R 参数,表示递归修改;或者在.ssh 目录下使用命令 $ chmod 700 . 和 $ chmod 700 . .
3. scp: command not found
注:如果使用过程中提示“scp: command not found”这句,则说明你的服务器没有安装 scp,请使用下面的命令安装。另外要注意的是,使用 scp 的时候,需要两台服务器都要安装 scp,任何一方没有安装都不能正常使用:
yum -y install openssh-clients