前提:

  1. 秘钥的生成需要OpenSSL的支持, 需要自行进行安装

一. 新建用户

  在root登陆状态中执行命令:

useradd -m ssh-user  # centos
adduser ssh-user # ubuntu passwd ssh-user // 设置ssh-user密码

  切换到ssh-user 用户:

su ssh-user  

  追加用户组:

sudo usermod -a -G sudo xxx
# 将xxx用户加入到sudo组中,具有超级管理员权限

二. 创建.ssh目录并生成秘钥对

  创建.ssh目录:

mkdir /home/ssh-user/.ssh

  生成秘钥对:

ssh-keygen -t rsa -b 4096

参数说明:

usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]

                  [-N new_passphrase] [-C comment] [-f output_keyfile]

       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

       ssh-keygen -i [-m key_format] [-f input_keyfile] 读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥

       ssh-keygen -e [-m key_format] [-f input_keyfile] 读取openssh的私钥或者公钥文件

       ssh-keygen -y [-f input_keyfile]

       ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
          -C 添加注释 ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile] 显示公钥文件的指纹数据 ssh-keygen -B [-f input_keyfile] ssh-keygen -D pkcs11 ssh-keygen -F hostname [-f known_hosts_file] [-l] ssh-keygen -H [-f known_hosts_file] ssh-keygen -R hostname [-f known_hosts_file] ssh-keygen -r hostname [-f input_keyfile] [-g] ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point] ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines] [-j start_line] [-K checkpt] [-W generator] ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals] [-O option] [-V validity_interval] [-z serial_number] file ... ssh-keygen -L [-f input_keyfile] ssh-keygen -A ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number] file ... ssh-keygen -Q -f krl_file file ...

  生成成功之后 ,会在该目录下有两个文件: id_rsa(私钥), id_rsa.pub(公钥)

  目录下新建文件authorized_keys:

touch authorized_keys

  将公钥追加到authorized.key文件中:

cat id_rsa.pub >> authorized_keys

  设置目录权限:

chmod 700 /home/ssh-user/.ssh

  设置文件权限:

chmod 600 /home/ssh-user/.ssh/authorized_keys

  将私钥下发到本地或需要进行登陆的远端服务器上:

    可以使用FTP链接下载或者scp等命令传输过去即可.

scp -P 8932 -i user1/.ssh/id_rsa  user2/.ssh/authorized_keys user1@172.160.114.147:/home/user2

三. 远程登录(秘钥对)

  远程登录命令:

ssh  -i ./id_rsa  ssh-user@47.99.180.120  

参数说明:

usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]

           [-D [bind_address:]port] [-E log_file] [-e escape_char]

           [-F configfile] [-I pkcs11] [-i identity_file]

           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]

           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]

           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]

           [user@]hostname [command]

四. 禁止密码登陆

  编辑文件/etc/ssh/sshd_config

 AuthorizedKeysFile   .ssh/authorized_keys   //公钥公钥认证文件

 PubkeyAuthentication yes   //可以使用公钥登录

 PasswordAuthentication no  //不允许使用密码登录

五. 重启sshd服务

  1) centos

service sshd restart

systemctl restart sshd.service

  2)ubuntu

# 启动
/etc/init.d/ssh start # 重启
/etc/init.d/ssh restart

其他:

  l 使用配置登录别名,进行登陆(在需要进行登陆的服务器上)

vim  ~/.ssh/config

Host            ssh-user             # 别名

HostName        aslong.xin         # 域名或ip

Port            22                 # 端口

User            dev                # 登录名

IdentityFile    ~/.ssh/id_rsa      # 本机私钥存放位置

命令:

ssh  ssh-user 

  2. 使用ssh-copy-id实现免密登陆

    1) 在本地机器上使用ssh-keygen产生公钥私钥对

ssh-keygen -t 加密方式 

    2)用ssh-copy-id将公钥复制到远程机器中

$  ssh-copy-id -i .ssh/id_rsa.pub  用户名字@192.168.x.xxx

注意: ssh-copy-id 将key写到远程机器的 ~/ .ssh/authorized_keys 文件中

    3)登录到远程机器不用输入密码

$  ssh 用户名字@192.168.x.xxx

    

 常见问题

  1. Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open

  使用终端进行连接的时候,报错,这是由于权限过大,需要限制其私钥的访问权限

chmod 600 id_rsa

  2. 登录失败WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

解决方案:

    修改~/.ssh/known_hosts  这该需要登录的ip的相关信息删除掉即可

  

  3.设置密钥登录成功之后, 但是登录的时候还是会提示输入密码,试了好久, 最终找到了问题

我是使用的root权限,也是给root用户添加的密钥, 但是根目录下/root 的所属用户组却是www,于是修改

chown root.root  root

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

即可正常使用,  若遇到此问题不知如何下手的时候,可以查看日志文件

tail  /var/log/secure -n 20

发现问题的所在:Authentication refused: bad ownership or modes for file

从字面上可以看出是目录的属主和权限配置不当,查找资料得知:SSH不希望home目录和~/.ssh目录对组有写权限

  4. 在Windows下无法使用ssh-copy-id命令

cat .\id_rsa.pub | ssh 登录用户@IP地址 "cat >> ~/.ssh/authorized_keys"

ssh之秘钥登陆的更多相关文章

  1. 服务器做ssh免秘钥登陆

    集群内服务器做非root用户免秘钥登陆:1.node1新建用户abc1,制作公钥.私钥(一路回车键即可)ssh-keygen –t rsa将自动在/home/abc1/.ssh/目录下创建公私钥文件如 ...

  2. ssh免秘钥登陆实现

    1.用处 搭建集群或者工作中登陆跳板机经常需要做免秘钥互相登陆彼此服务器. 2. 准备工作   假设A主机10.20.0.1想通过ssh登录到B主机10.20.0.2上.   那么客户端(A主机)需要 ...

  3. Centos7 配置ssh 免秘钥登陆

    1.yum install -y openssh 2.servier1: ssh-keygen -t rsa #有提示的直接enter 3.server 2: ssh-keygen -t rsa # ...

  4. linux下ssh key秘钥登陆远程服务器设置

    本地的用户名需要和ssh服务器的用户名一致 1.在Server服务器上加载私钥文件ssh-add wang_rsa 2.如果系统提示:could not open a connection to yo ...

  5. 配置ssh秘钥登陆

    环境2台linux服务器:node1 192.168.X.234                               node2 192.168.X.242 演示用node1无密码登陆node ...

  6. linux下ssh免秘钥登录

    1.检查防火墙是否关闭 (1)切换到root用户 (2)查看防火墙状态 service iptables status 这是没有关闭 (3)设置关闭 service iptables stop 2.检 ...

  7. ssh 多秘钥管理和坑

    概述 很久之前就想研究一下 ssh 的多秘钥管理,今天正好有时间就研究了一下,挺简单的,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: Git - 生成 SSH公钥 , Linux 下多 ...

  8. ssh分发秘钥时出现错误“Permission denied (publickey,gssapi-keyex,gssapi-with-mic)”

    因为公司的服务器连接是通过xshell公钥和密码连接的,今天在ssh分发秘钥的时候出现了,下面的错误: [root@iZ2ze97cumk8opqm28h8Z .ssh]# ssh-copy-id - ...

  9. Linux SSH 免秘钥登录

    SSH 免秘钥登录 ssh:是一种安全加密协议 ssh  username@hostname     ssh gongziyuan.com:以当前用户登录该机器(如果不是当前用户,需要这么干:ssh ...

  10. ansible-playbook 打通ssh无秘钥

    建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...

随机推荐

  1. 5.5文件上传-WAF绕过

    一.WAF绕过(明确有文件上传) 1.上传参数中,可修改参数 Content-Dispositin:一般可改 name:表单参数,不可更改 filename:文件名,可更改 Content-Type: ...

  2. c程序设计语言 by K&R(一)一些c语言基础知识

    出自<c程序设计语言> by K&R: 一.导言 二.类型.运算符与表达式 三.控制流 1. 字符输入与输出 getchar() 和 putchar(),输入一个字符.输出一个字符 ...

  3. SQL查折线图数据

    在做后台管理系统的时候,有很大概率是要与各种图表数据打交道, 那么如何通过SQL查出基本图表的数据呢,以折线图为例, X轴为日期,Y轴为统计数据,那么我们通过SQL如何查询出连续日期下的统计数据呢, ...

  4. python脚本之requests库上传文件

    一.前言 在学习的时候,发现有一个AWD的文件上传执行漏洞,突然想着批量对不同靶机进行操作并get_flag.思路简单,但是没构造 过文件上传的requests 的post请求的payload.便记录 ...

  5. DVI与VGA有什么区别?

    DVI接口:DVI(Digital Visual Interface),即数字视频接口.DVI接口速度快.画面清晰.支持HDCP协议. VGA接口:VGA(Video Graphics Array)即 ...

  6. docker 安装启动jenkins 以及问题剖析

    docker 安装启动jenkins 以及问题剖析   首先,你环境必须要有docker,我这里是自己本地虚拟机Vmware,我的虚拟机时linux centos7的 .如果你不知怎么安装虚拟机和命令 ...

  7. form data 与request payload的区别以及php接收这些数据的方法

    form data 与request payload的区别以及php接收这些数据的方法 以前与前端交互一直都是POST.GET的,PHP端就直接$_POST,$_GET来接收,从来没有出现过以外. 最 ...

  8. 读取.raw格式文件(学习记录)

    import cv2 #OpenCV包 import numpy as np # 首先确定原图片的基本信息:数据格式,行数列数,通道数 rows=886#图像的行数 cols=492#图像的列数 ch ...

  9. CF753B题解

    这应该算是一个很脍炙人口的小游戏了吧 (没玩过算我没说) 因为一共有 \(50\) 次询问机会,那最简单直接的方法就不难想到. 我们把 \(0 \sim9\) 全部询问一遍,如果回答两个整数不全为 \ ...

  10. MySQL数据的导出

    有时需要将MySQL数据库中的数据导出到外部存储文件中,MySQL数据库中的数据可以导出成sql文本文件.xml文件或者html文件.本节将介绍数据导出的常用方法. 11.4.1  使用SELECT- ...