操作系统使用免密登录

服务器免密登录

背景

在工作中使用密码登录有时候会出现这样或者那样的不方便,一是密码要输入,如果明文输入则不安全,二则一旦修改密码要重新分发到有权限的小伙伴

场景

在之前的工作中有很多场景需要免密等登录,使用免密带来的便利

  1. 可以免密登录远程机器,方便快捷,不受对方改密码的限制
  2. 可以使用rsync定时拷贝文件
  3. 使用scp进行文件拷贝
  4. 使用Ansible进行远程服务器管理等

可能存在的问题

免密虽然好用,但要配置,在使用过程中未免会遇到各种问题,我这边在Linux上遇到的问题有

  1. 公私钥不匹配
  2. .ssh权限问题
  3. 第一次必须手动输入yes的问题
  4. windows上无法使用免密的问题

实现

Linux上设置

ssh认证的原理简单来说是这样的,在本地的私钥和远程机器的中authorized_keys存储的公钥进行配对,配对成功即可实现远程登录

Linux上首先这么操作的,一路回车,会在生成当前用户家目录下生成.ssh文件夹和文件夹下的id_rsa(私钥)id_rsa.pub(公钥)

[test@localhost~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): 
Created directory '/home/test/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sFqV+jGW52h9fuyREovdSGk9n4s5y3/SHm4mCwwpMd4 test@localhost
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|         .       |
|      .oo        |
|      .=+..  o   |
|      +oSE. = o  |
|     o o.Bo= = +.|
|    .   + +o*.++.|
|       .   oo+B+=|
|            .OX*o|
+----[SHA256]-----+

目录结构

[test@localhost~]$ tree .ssh/
.ssh/
├── id_rsa
└── id_rsa.pub

0 directories, 2 files
[test@localhost~]$ 

将公钥拷贝到远程机器


[test@localhost~]$ ssh-copy-id [email protected]
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/test/.ssh/id_rsa.pub"
The authenticity of host '192.168.31.22 (192.168.31.22)' can't be established.
ECDSA key fingerprint is SHA256:yjNMl5BfVvsJ3HmpCPv3B3Y+5XbT4mxwMnDGUHSpnBs.
ECDSA key fingerprint is MD5:0d:08:47:ee:4f:32:a6:8b:8f:2d:dd:fa:f4:f3:e0:5a.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

[test@localhost~]$ 

或者手动将公钥拷贝到~/.ssh/authorized_keys文件中,切记公钥拷贝的时候不可换行
正常情况下,这样就完成了免密登录

ssh '[email protected]'

在Linux上遇到的问题大部分是权限的问题

.ssh 权限要700 -rwx------
id_rsa 权限 600 -rw-------
authorized_keys 权限 600 -rw-------
远程登录用户的家目录755以下

如果指定私钥登录则命令是

ssh -i /path/id_rsa [email protected]

windows上设置

windows上设置和Linux上的方式是一样的,但windows上并没有Linux的命令则需如下操作

  1. 安装gitbash
    主机和客户机都要安装,步骤简单一路回车即可,下载地址

  2. 客户机上安装openssh
    只在测试机安装,回车都不用,直接默认地址,要用管理员安装下载地址

  3. 调整注册表
    客户机调整注册表,wind+r 输入regedit,找到openssh对应的选项,新增DefaultShell,这样远程登录后是gitbash的方式登录
    操作系统使用免密登录_第1张图片

  4. 调整openssh的配置
    这个坑了我好几天,在问了大佬才知道要调整配置
    在C:\ProgramData\ssh目录中有个sshd_config的配置,将AuthorizedKeysFile注释掉,不注释掉则无法完成登录

#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

还没完,还要重启sshd服务

# 查看sshd的状态
Get-Service -Name sshd
PS C:\Users\Administrator>  Get-Service -Name sshd

Status   Name               DisplayName
------   ----               -----------
Running  sshd               OpenSSH SSH Server

# 重启
sshd
Restart-Service sshd
# 停止
Stop-Service sshd
# 启动
Start-Service sshd

到这里已经完成了,折腾了我好几天,一个注释的事,学艺不经,继续努力。

你可能感兴趣的:(linux,环境问题,windows,linux,ssh,服务器)