Azure  Linux  VM密钥登录

前提条件:

Azure 上创建两台Linux虚拟机,其它一台已经使用使用"ssh-keygen -t rsa"命令来创建公钥。

(如果不需要修改,直接回车两次即可,默认保存路径为"~/.ssh/")

 

blob.png

操作步骤:

"~/.ssh/id_rsa.pub"这个文件拷贝到"40.125.167.182"服务器的"~/.ssh/"目录中并改名为"authorized_keys"

[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.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '40.125.167.182' (ECDSA) to the list of known hosts.

wangruifeng@40.125.167.182's password:

id_rsa.pub                                                                                                     100%  400   408.3KB/s   00:00   

 

修改"40.125.167.182"服务器的"~/.ssh/"目录权限为700"~/.ssh/authorized_keys"文件权限为600

(这是linux的安全要求,如果权限不对,自动登录将不会生效。)

 

blob.png

 

再次使用ssh连接,已经实现密钥匙登录:

blob.png

spacer.gif

 

故障排查:

可能还会提示输入密码的解决方法:

 

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"

 

SSH免密码登录原理:

 

这种方式你需要在客户端服务器上为自己创建一对密匙,并把公匙放在需要登录的服务器上。

当你要连接到服务器上时,客户端就会向服务器请求使用密匙进行安全验证。

服务器收到请求之后,会在该服务器上你所请求登录的用户的家目录下寻找你的公匙,

然后与你发送过来的公匙进行比较。

如果两个密匙一致,服务器就用该公匙加密“质询”并把它发送给客户端。

客户端收到“质询”之后用自己的私匙解密再把它发送给服务器。

 

使用场景:

 

1) rsync自动备份时免密码登录;

2) 集群环境中需要主机间互相通信;

3) 自动部署项目,将编译好的war包放到正确的服务器上。