Azure 上建立两台Linux虚拟机,其它一台已经使用使用"ssh-keygen -t rsa"命令来建立公钥。linux
(若是不须要修改,直接回车两次便可,默认保存路径为"~/.ssh/")vim
将"~/.ssh/id_rsa.pub"这个文件拷贝到"40.125.167.182"服务器的"~/.ssh/"目录中并更名为"authorized_keys"。centos
[wangruifeng@centos .ssh]$ scp id_rsa.pub wangruifeng@40.125.167.182:/home/wangruifeng/.ssh/authorized_keys缓存
The authenticity of host '40.125.167.182 (40.125.167.182)' can't be established.安全
ECDSA key fingerprint is SHA256:utVm2XGMADXER1jJKS33wX/NGx5Izy0DjL8mXxXqUsE.服务器
ECDSA key fingerprint is MD5:d5:3f:dd:ff:3a:dc:44:15:dd:37:fc:31:04:6a:8c:7e.ssh
Are you sure you want to continue connecting (yes/no)? yeside
Warning: Permanently added '40.125.167.182' (ECDSA) to the list of known hosts.ui
wangruifeng@40.125.167.182's password:this
id_rsa.pub 100% 400 408.3KB/s 00:00
修改"40.125.167.182"服务器的"~/.ssh/"目录权限为700,"~/.ssh/authorized_keys"文件权限为600。
(这是linux的安全要求,若是权限不对,自动登陆将不会生效。)
再次使用ssh链接,已经实现密钥匙登陆:
可能还会提示输入密码的解决方法:
1) 若是出现报警:"Address X.X.X.X maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!"。
在"XXXXX"(链接端)服务器上执行以下命令:
echo "GSSAPIAuthentication no" >> ~/.ssh/config
在"XXXXX"(被链接端)服务器上执行"vi /etc/ssh/sshd_config"命令,修改下面两项值为"no" :
"GSSAPIAuthentication no"
"UseDNS no"
2) 若是出现报警:"Agent admitted failure to sign using the key."
执行命令:"ssh-add"(把专用密钥添加到ssh-agent的高速缓存中)
若是还不行,执行命令:"ps -Af | grep agent "
(检查ssh代理是否开启,若是有开启的话,kill掉该代理)
而后执行"ssh-agent"(从新打开一个ssh代理)
若是仍是不行,继续执行命令:"sudo service sshd restart"(重启一下ssh服务)
3) 经过命令"/usr/sbin/sestatus -v" 查看SELinux状态,若是"SELinux status"参数为"enabled"(开启状态),则关闭SELinux。
临时关闭方法(不用重启机器):"setenforce 0"
修改配置文件关闭方法(须要重启机器):执行命令"/etc/selinux/config",将"SELINUX=enforcing"改成"SELINUX=disabled"
4) 执行命令"vim /etc/ssh/sshd_config"去掉下面三行的注释:
"RSAAuthentication yes"
"PubkeyAuthentication yes"
"AuthorizedKeysFile .ssh/authorized_keys"
这种方式你须要在客户端服务器上为本身建立一对密匙,并把公匙放在须要登陆的服务器上。
当你要链接到服务器上时,客户端就会向服务器请求使用密匙进行安全验证。
服务器收到请求以后,会在该服务器上你所请求登陆的用户的家目录下寻找你的公匙,
而后与你发送过来的公匙进行比较。
若是两个密匙一致,服务器就用该公匙加密“质询”并把它发送给客户端。
客户端收到“质询”以后用本身的私匙解密再把它发送给服务器。
1) rsync自动备份时免密码登陆;
2) 集群环境中须要主机间互相通讯;
3) 自动部署项目,将编译好的war包放到正确的服务器上。