ssh密钥登录远程主机配置

1.什么是公钥&私钥

  • public key(公钥)存放在欲登录的服务器上,而private key(私钥)为特定的客户机所持有。
  • 当客户机向服务器发出建立安全连接的请求时,首先发送自己的public key,如果这个public key是被服务器所允许的,服务器就发送一个经过public key加密的随机数据给客户机,这个数据只能通过private key解密,客户机将解密后的信息发还给服务器,服务器验证正确后即确认客户机是可信任的,从而建立起一条安全的信息通道。
  • 通过这种方式,客户机不需要向外发送自己的身份标志“private key”即可达到校验的目的,并且private key是不能通过public key反向推断出来的。这避免了网络窃听可能造成的密码泄露。
  • 客户机需要小心的保存自己的private key,以免被其他人窃取。
  • 这就是为什么先在本地生成密钥,而不是在登录你的vps以后生成然后把私钥下载到本地,任何时刻都要保证私钥处在一个安全的地方

2.本地客户机(windows)生成密钥对

  • 如果本地客户机是linux系统,可参考这里的第二点生成密钥对,使用指令生成(其实windows下也可以用指令生成=。=)
  • 在官网下载puttygen.exe
  • 直接运行puttygen.exe在本地生成密钥对(在空白框内随机滑动鼠标会加快生成速度)
  • 保存密钥对
    • 第二栏修改的是公钥最后==后面的备注信息,可以不改
    • 第三栏是使用私钥的时候需要额外的密码,可不填
    • save public key && save private key
    • 复制界面中的公钥内容到一个txt文件中保存
    • 由于默认保存的私钥文件是.ppk格式,这是windows下使用的格式,要转换成linux下使用的格式需要使用Conversions中的Export OpenSSH key功能,保存一个没有文件扩展名的私钥文件
    • 所以一共是保存了四个文件
      ssh密钥登录远程主机配置_第1张图片

3.配置远程主机

(1) 密码登录需要ssh登录的用户your_username
(2) 安装openssh

  • ubuntu
~: sudo apt-get update
~: sudo apt-get install ssh
~: ssh -V  

显示ssh版本号即表示安装成功,这时候~路径下会多一个隐藏的.ssh文件夹;这时候需要修改.ssh文件夹的拥有者:sudo chown -R your_username:your_username /home/your_username/.ssh
如果没有这个隐藏文件夹,那可能需要重新装装一下ssh;如果确认已经装好了ssh,那么就手动创建一个.ssh文件夹并修改权限,和下面的Centos的操作相同。

  • Centos:系统默认就已经安装好openssh服务了,可以使用ssh -V查看ssh的版本号确认是否安装;但是是没有.ssh文件夹的,所以需要在~路径下自己创建,并修改权限(必须)。
~: mkdir .ssh
~: chmod 700 ~/.ssh

(3) 创建authorized_keys文件,并将已生成的公钥内容复制到该文件中,保存,最后修改该文件的权限(必须)

~: cd .ssh
~/.ssh: touch authorized_keys
~/.ssh: vi authorized_keys
~/.ssh: chmod 600 authorized_keys

(4) 修改 /etc/ssh/sshd_config 文件的配置内容 (建议先测试ssh能否登陆成功再回头禁止密码登录=。=)

~: sudo su
~: vi /etc/ssh/sshd_config 

## 允许root登录
PermitRootLogin yes
## 使用密钥登录
RSAAuthentication yes
PubkeyAuthentication yes
## 禁止空密码和密码登录
PermitEmptyPasswords no
PasswordAuthentication no
## 监听端口(一般默认是22,或者是自己已开的端口,不改即可)
Port 22

(5) 重启ssh服务(每次修改ssh的配置文件都要重启服务):

  • Centos下: sudo service sshd restart
  • Ubuntu下: sudo service ssh restart

4.使用ssh密钥登录

  • windows下登录:断开终端,选择使用密钥登录,如果私钥设置了额外密码,导入私钥文件时需要输入额外密码。(xshell使用的是openssh key格式的密钥,winscp使用的是ppk格式的密钥)
  • linux下登录:退出远程主机,需要将私钥复制到 ~/.ssh/your_privateKey,然后重新打开终端执行:
ssh your_username@server_ip

5.openssh格式密钥转ppk格式

  • 运行puttygen.exe
  • 点击file→Load private key,将openssh格式的私钥加载进去
  • 然后点击conversions→Export ssh.com key,即可转换成ppk文件

你可能感兴趣的:(Linux)