用户登录远程主机需要持有“公钥/私钥对”,远程服务器持有公钥,本地持有私钥。
客户端向服务器发出请求。服务器收到请求之后,先在用户的主目录下找到该用户的公钥,然后对比用户发送过来的公钥。如果一致,服务器用公钥加密“质询”并发送给客户端。客户端收到“质询”后用私钥解密,再发还给服务器。认证结束。
生成 ssh-key,选加密算法(rsa、dsa),给秘钥命名(可选):
$ ssh-keygen -t rsa -C "name"
passphrase 是证书口令,以加强安全性,避免证书被恶意复制。
会在 ~.ssh
下生成 id_rsa
, id_rsa.pub
两个文件,分别是 私钥/公钥。
公钥需保存到远程服务器 ~/.ssh/authorized_keys
里,注意authorized_keys是一个文件,不是文件夹,私钥由客户端本地留存。
要保证 .ssh
和 authorized_keys
都只有用户自己有写权限。否则验证无效。
$ chmod -R 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys
$ vim /etc/ssh/sshd_config
# 修改以下三个字段
# RSAAuthentication yes
# PubkeyAuthentication yes
# AuthorizedKeysFile %h/.ssh/authorized_keys
id_rsa.pub
文件为本地机器的公钥,需要将其内容放置在远程服务器的/用户名/.ssh/authorized_keys
文件中。
方法有两种:
通过此命令可以直接将文件复制到对应用户的.ssh中,如果ssh不是默认端口可以添加-p port
来自定义端口号。
先使用scp将文件复制到远程主机上。
scp /Users/xxxx/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx:/root/
登录远程主机,将公钥访问认证key文件中。
cat /root/id_rsa.pub >> ~/.ssh/authorized_keys
scp、sftp都是基于ssh的协议,因此端口号与ssh均相同,默认为22。
$ service sshd restart
# 重启ssh服务使配置生效
如果不出问题的话,此时在本地主机终端上输入ssh root@xxx.xxx.xxx.xxx
就会直接跳过输入密码,登入远程主机终端了。