理解:
- 1. 一直以来都是通过密码远程 ssh 登录到 linux服务器
- 2. 最近学习 Docker 总是看到大家都设置成密钥方式登录
- 3. 除了密码被破解的风险之外,到底还有哪些好处?
-
- 4. 看到有个文章写到:如果有员工离开,只需要删除他的公钥,这还有点儿用!
- 5. 但是密码还是要修改的吧!改密码和删除公钥,哪个更直接有效?
测试环境、测试目标
- linux 客户端(192.168.1.191): 环境: VisualBox虚拟机 ubuntu 18.04 Server
- Mac 客户端 (XXXXXXXXXXXXXX):
- Windows 客户端(192.168.1.174): 环境: VisualBox虚拟机 Win10
-
- 服务端(192.168.1.192): 环境: VisualBox虚拟机 ubuntu 18.04 Server
-
- 目的:使用密钥方式ssh登录到 192 服务器
方式说明:
- 1. 有些文章介绍的都是从服务端创建好私钥、公钥,然后下发给客户端,也是可以实现的
- 2. 我这里将私钥、公钥的生成交给客户端生成
- 3. 我认为客户端自己负责生成私钥、公钥,再将公钥交给管理员上传(或编辑),利于控制和管理
检测、安装 sshd
- ps -ef |grep sshd
- 一般安装过程最后会提示安装那些组件,如果忘记了选择 openssh-server
- 只好在这里重新安装一次
-
- sudo apt-get install openssh-server
服务端 sshd 配置修改
- 1. 修改 sshd_config
- sudo vim /etc/ssh/sshd_config 修改以下 4 处
-
- # by wzh 20190114 yes--no
- StrictModes no
-
- # by wzh 20190114
- PubkeyAuthentication yes
-
- # by wzh 20190114
- AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
-
- # by wzh 20190114 yes ---no ,can not use password to SSH
- PasswordAuthentication no
- ** 这一处最好等测试密钥方式正确之后,再单独修改!
-
- 2. 建立公钥key 保存文件
- sudo mkdir .ssh
- cd .ssh
- sudo touch authorized_keys
- sudo vim authorized_keys
- 加入 pubkey
-
- 3. 重启 SSHD
- sudo systemctl restart sshd
1、从 linux ssh 到 linux
- 1. 在 191 客户端 上建立密钥对
- ssh-keygen
- 简单起见,一路回车!passphrase 也是空着!
-
- 2. 确认公钥私钥文件是否生成
- ls
- authorized_keys id_rsa id_rsa.pub
-
- 3. 上传 191 自己的公钥到 192
- ssh-copy-id -i ~/.ssh/id_rsa.pub dhbm@192.168.1.192
- 或者直接在当前目录
- ssh-copy-id -i id_rsa.pub dhbm@192.168.1.192
-
- 返回结果如下:
- /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
- The authenticity of host '192.168.1.192 (192.168.1.192)' can't be established.
- ECDSA key fingerprint is SHA256:7CHsZoFn6YJ7RInEerqfKmKc0dw/TGpRK0Tca8piTCI.
- Are you sure you want to continue connecting (yes/no)?
- 4. 测试一下
- ssh dhbm@192.168.1.192
- 因为之前是密码方式,第一次可能还会要求输入密码
- Ok
- 5. 删除测试
- 在 192 服务器上 cd .ssh ,rm authorized_keys
- 这是我自己测试,只有一个用户,可以简单删除 authorized_keys 文件
- 如果多人操作,只能打开 authorized_keys 文件,删除对应的记录
- authorized_keys wen jian文件内容如下图:
- $ ll
- total 24
- drwx------ 2 dhbm dhbm 4096 Jan 11 17:15 ./
- drwxr-xr-x 15 dhbm dhbm 4096 Jan 11 17:15 ../
- -rw------- 1 dhbm dhbm 401 Jan 11 17:15 authorized_keys
- ...
- 再次 测试 191 ssh 到 192
- ssh dhbm@192.168.1.192
- dhbm@192.168.1.192's password:
- ** 回到了之前的密码方式
- ** 等确认一段时间之后,再来去掉密码方式登录
- 6. 重复以上 ssh-copy-id 再来!这次就不要再删除了!
2、从 Mac 客户端到 192 服务器
- 1. 和以上 Linux 操作一样的次序,在 Mac 上建立密钥对
- ssh-keygen
- 返回结果:
- ...
- Your identification has been saved in /Users/dhbm/.ssh/id_rsa.
- Your public key has been saved in /Users/dhbm/.ssh/id_rsa.pub.
-
- 1. 上传 Mac 的公钥到 192 服务器
- ssh-copy-id -i ~/.ssh/id_rsa.pub dhbm@192.168.1.192
-
- 3. ssh 测试
- ssh dhbm@192.168.1.192
3、从 Mac 到 192 上的 Docker (非 22 端口)
- 1. 按照网上搜索到的方法(直接 cd .ssh 目录下操作)
- ssh-copy-id -i id_rsa.pub "-p 10033 root@192.168.1.192"
- 返回错误:
- /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
- Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
- -f: force mode -- copy keys without trying to check if they are already installed
- -n: dry run -- no keys are actually copied
- -h|-?: print this help
-
- 2. 去掉引号
- ssh-copy-id -i ~/.ssh/id_rsa.pub -p 10033 root@192.168.1.192
- ok!
4、从 Windows putty 到 192 服务器
- 1. 下载 putty 和 putty gen
- 下载地址很多,我是从 CSDN 下载的
- https://download.csdn.net/download/baolang00/10529977
-
- 2. 首先打开 putty gen生成 公钥私钥
- ** 生成的时候非常慢,头几次不知道技巧的时候,每次都等待了将近 40 分钟!
- ** 技巧: 看到进度条,没事就在下面的空白处点鼠标!点鼠标!!点鼠标!
- 3. 保存私钥、key 和 公钥
- 1)、保存私钥 : 必须
- 2)、复制保存key:必须
- 3)、保存: 非必须
- 4. 将以上 key 内容发送给管理员,上传(直接编辑粘贴)到服务器
- ** 客户端保存之后文件夹内容如下
** 服务端加上公钥之后如下
- 5. 开始 putty SSH 连接
- 1)、设置登录账号
- 2)、加载自己的私钥
- 3)、保存本次会话(Session)
- ** 可以在测试成功之后,重新操作一次的时候保存
- ** 后续操作就可以直接加载(load)
-
- 4)、成功的话,就如下图,直接进入了服务器
5. 错误处理:总是看到 server refused our key
- 修改 192 服务端 sshd 配置(vim /etc/ssh/sshd_config)
- ** 之前都是 linux 之间操作,所以,都是严格模式 (StrictModes )
-
- 1)、#StrictModes yes 去掉注释,改成 StrictModes no
- 2)、#PubkeyAuthentication yes 去掉注释,改成 PubkeyAuthentication yes
- 3)、#AuthorizedKeysFile .ssh/authorized_keys 改成 AuthorizedKeysFile .ssh/authorized_keys
- 4)、保存退出,重启 sshd