背景: 有时候我们在两个主机之间复制文件的时候,提示输入密码,很不方便,那如何免密码复制呢?,就是使用通过linux公钥和秘钥,建立双机信任关系。
ssh免密码的要点 :
你想免密码登陆到哪个主机哪个用户, 就把你自己的公钥文件内容追加到远程主机对应用户下的authorized_keys文件中(对面可能没有这个文件,创建即可)。
- 生成秘钥:ssh-keygen —身份验证密钥的生成,管理和转换
[root@node1 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa #生成rsa;-t dsa加密算法;-f文件名:指定密钥文件的文件名;
- 实现本地linux 服务器免密登陆远程linux服务器10.15.0.99(本地公钥放到远程authorized_keys文件中):
ssh-copy-id -p 22 -i ~/.ssh/id_rsa.pub root@10.15.0.99 #复制本地公钥到远程服务器;在10.15.0.99的 ~/.ssh/目录下生成authorized_keys文件,其内容为本地公钥
- 实现远程服务器192免密登陆本地windows主机(将远程公钥放到本地authorized_keys文件中,windows本地不会建立authorized_keys文件,自己创建)
在本地建立authorized_keys文件,其内容为远程服务easyci@192.168.10.8:/home/easyci/.ssh 的公钥(id_rsa.pub)内容 - 实现本地windows主机免密登陆远程服务器(将本地公钥放到远程文件中)
(windows本地无法执行ssh-copy-id命令)
传输本地公钥到远程服务器
scp ~/.ssh/id_rsa.pub easyci@192.168.10.8
清除authorized_keys文件的内容(可以不用操作)
将id_rsa.pub文件的内容复制到authorized_keys的末尾
-
测试是否能免密登陆
- 注意:
- 2和3步都执行了,就叫做互信;
- 如果远程主机的端口非22端口,需要指定-p port选项。
- ssh-copy-id是由openssh-clients包提供,没有这个命令可以安装这个包。
- centos6,7使用ssh-copy-id的时候可以不用指定-i选项,centos5必须指定的。
- 将公钥拷贝到服务器的~/.ssh/authorized_keys文件中方法有如下几种:
1、将公钥通过scp拷贝到服务器上,然后追加到~/.ssh/authorized_keys文件中,这种方式比较麻烦。scp -P 22 ~/.ssh/id_rsa.pub user@host:~/。
2、通过ssh-copy-id程序,就是我演示的方法,ssh-copyid user@host即可
3、可以通过cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’,这个也是比较常用的方法,因为可以更改端口号。
windows重启ssh:net stop sshd,net start sshd
linux重启ssh:service sshd restart , systemctl restart sshd.service
windows本地的ssh地址
windows10 自带的有
- scp
- sftp
- ssh
- ssh-add
- ssh-agent
- ssh-keygen
- ssh-keyscan
路径是 C:\Windows\System32\OpenSSH
参考资料:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_023_sshgenkey.html
https://www.cnblogs.com/wenxingxu/p/9597307.html