在通过ssh登录其它电脑或通过scp/rsync同其它电脑之间传输文件时,每次都需要输入密码,如下图所示:在windows10上通过ssh登录虚拟机,每次登录都需要输入密码;若端口默认为22,可省略通过-p指定
可通过将本机上的公钥key存放到要访问电脑的~/.ssh/authorized_keys文件解决ssh免密登录及scp/rsync免密传输文件的问题:此方法适用于linux与linux、windows到linux、及linux本机执行scp/rsync的操作;Mac与Mac间应该也是可以的,未验证
1.通过ssh-keygen产生公私钥:执行:ssh-keygen -t rsa ,如下图所示:连续3次回车,默认生成的文件存放到~/.ssh目录下,也可指定存放到其它目录;密码为空
执行完ssh-keygen后,会在~/.ssh目录下生成id_rsa和id_rsa.pub两个文件,其中id_rsa为私钥,id_rsa.pub为公钥,需要将公钥内容存放到要操作的电脑的~/.ssh/authorized_keys文件中;其实通过ssh方式从GitHub、GitLab、Gitee、Gerrit上clone代码时,也是需要将此公钥文上传
2.将id_rsa.pub文件内容拷贝到~/.ssh/authorized_keys:可以有两种方式:cat或sh-copy-id
(1).通过cat: 首先将id_rsa.pub拷贝到其它电脑上,然后cat,如下图所示:如果~/.ssh目录下没有authorized_keys文件,则会生成一个新authorized_keys文件
(2).通过sh-copy-id:如下图所示,authorized_keys文件可存放多个公钥,此时~/.ssh/authorized_keys 文件中存放着两个公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub spring@127.0.0.1
3.验证是否生效:
(1).windows10通过ssh登录ubuntu虚拟机:可见通过ssh登录不再需要输入密码
(2).linux本机执行scp/rsync:此操作过程同不同linux电脑之间完全一致,可见通过scp/rsync传输文件不再需要输入密码
scp -r /home/spring/GitHub/src/* spring@10.0.2.15:/home/spring/GitHub/dst/
rsync -rav -e ssh --exclude="*.txt" /home/spring/GitHub/src/ spring@10.0.2.15:/home/spring/GitHub/dst/
4.若不生效,检查文件权限:
(1).~/.ssh目录权限需要为700
(2).~/.ssh/authorized_keys文件权限需要为600