假设A为客户机器,B为目标机;
要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa
做法:
1、登录A机器
2、ssh-keygen -t [rsa|dsa],将会生成密钥文件和公钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
具体方法如下:ssh-keygen -t rsa
然后全部回车,采用默认值。
这样生成了一对密钥,存放在用户目录的/.ssh下。/.ssh/authorized_keys中。
将公钥考到对方机器的用户目录下,并拷到
3、将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_rsa.pub >> ~/.ssh/authorized_keys
或直接执行下面的操作:
将公钥(.pub文件)从A机器复制到B机器上面
1 | [root@localhost .ssh]# scp id_rsa.pub root@192.168.36.194:~/.ssh/authorized_keys |
4、设置文件和目录权限:
设置authorized_keys权限$ chmod 600 authorized_keys
设置.ssh目录权限$ chmod 700 -R .ssh
5、大功告成,从A机器登录B机器的目标账户,不再需要密码了。
要保证.ssh和authorized_keys都只有用户自己有写权限(建议权限设置为600)。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。
总结注意事项
- 文件和目录的权限千万别设置成chmod 777,这个权限太大了,不安全,数字签名也不支持。
- 生成的rsa/dsa签名的公钥是给对方机器使用的,这个公钥内容还要拷贝到authorized_keys。
- linux之间的访问直接 ssh 机器ip
- 某个机器生成自己的RSA或者DSA的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和authorized_keys权限),这个目标机就能被生成数字签名的机器无密码访问了。
在windows下面安装了git后,没有使用 git bash 去生成key时,可能会出现以下错误
1 | Microsoft Windows [版本 6.3.9600] |
这个错误的原因是我们没有配置环境变量HOME目录,从而找不到目录。
所以我们只要在环境变量中增加HOME就能解决问题了!~
1 | C:\Users\Loftor>ssh-keygen |
参考地址:
Window下 使用自带命令行使用ssh-keygen
使用ssh-keygen设置ssh无密码登录
ssh-keygen 的 详解