SSH是一种网络协议,用于计算机之间的加密登录,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。Linux常用OpenSSH。
使用SSH协议,客户端需要安装openssh-clients ,服务端需要安装openssh-server(系统默认安装好了)。
本文使用CentOS7系统,并用root用户登陆,服务端需要保证 /etc/ssh/sshd_config 的配置正确,一些云服务器默认是不允许ROOT用户远程登陆的。
# 是否允许以root用户身份登录,默认可以
PermitRootLogin yes
# 是否允许密码登陆,默认可以
PasswordAuthentication yes
# 是否允许公钥验证登陆,默认可以
PubkeyAuthentication yes
OpenSSH使用非对称加密方案的登陆流程如下:
实战
1、准备两台安装了CentOS7的主机,一台作为客户端,一台作为服务端。客户端主机需要安装openssh-clients
yum install -y openssh-clients
2、客户端执行 ssh root@服务端IP
3、首次登陆时,服务端会返回服务端指纹让客户端确认,服务端的指纹在互联网公示出来,以避免黑客劫持请求,伪造指纹。
点击回车 // 信任指纹
4、输入服务端root用户的密码
客户端就登陆服务端了。可执行 exit 命令退出服务端。
每次登陆要输入密码导致诸多不便,SSH提供了免密登陆功能。免密登陆需要客户端生成密钥对,并将公钥追加到服务端的authorized_keys文件中。
免密登陆流程如下
实战
1、准备两台安装了CentOS7的主机,一台作为客户端,一台作为服务端。客户端主机需要安装openssh-clients
yum install -y openssh-clients
2、客户端执行 ssh-keygen 命令生成公钥与私钥。默认使用RSA非对称加密算法,此命令会询问秘钥对存放位置,按回车使用默认即可,提示输入passphrase也是按回车使用默认即可。
生成的密钥对默认存放在 当前用户的家目录/.ssh目录中,id_ras是私钥,id_rsa.pub是公钥。需要将id_rsa.pub公钥内容追加到服务端的 authorized_keys 文件中。
3、客户端执行 ssh-copy-id root@服务端IP 将本机的id_rsa.pub公钥内容追加到服务端的/root/.ssh/authorized_keys 文件中。
然后提示需要输入服务端root用户的密码,输入密码,回车即可。
4、客户端执行 ssh root@服务端IP ,就直接登录到服务端了
补充:第3步也可以拷贝客户端的id_rsa.pub公钥内容,然后追加到服务端的/root/.ssh/authorized_keys文件中,与执行 ssh-copy-id root@服务端IP 命令是同样的效果。
服务端进入~/.ssh
cd ~/.ssh
新建authorized_keys
vim authorized_keys
将客户端id_rsa.pub追加到服务端authorized_keys中
修改服务端authorized_keys、.ssh权限
chmod 600 authorized_keys
chmod 700 ~/.ssh
特别提醒:使用xshell粘贴内容经常少粘贴一两个开头的字符,导致公钥不对,无法登录,请认真检查粘贴后的公钥是否完整。
服务端加了两个公钥
1、点击“工具” →“ 新建用户密钥生成向导”
2、使用默认的RSA算法生成密钥对。点击下一步
3、生成公钥对页面,点击下一步即可
4、用户密钥信息页面,输入密钥名称,加密密钥的密码不填,点击下一步。
5、提示密码为空,是否继续,点击“是”
6、点击“保存为文件”,将公钥保存到本地,一般是保存到用户的.ssh目录下,公钥以 .pub 结尾。
7、保存到本地后点击“完成”
8、在“用户密钥”中就多了一个私钥。
9、将本地的 id_rsa_my.pub 内容追加到服务器的 /root/.ssh/authorized_keys 文件中
vim /root/.ssh/authorized_keys
10、Xshell使用公钥来接服务端主机
连接页面填写服务端主机IP
用户身份认证页面配置
方法:Public key
用户名:root
用户密钥:点击浏览,选择刚才生成的 id_rsa_my
密码:为空
这样配置后,本地电脑也能实现公钥免密登陆Linux。