前提:

  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. Go runtime 调度器精讲(七):案例分析

    0. 前言 前面用了六讲介绍 Go runtime 调度器,这一讲我们看一个关于调度 goroutine 的程序案例分析下调度器做了什么.需要说明的是,这个程序和抢占有关,抢占目前为止还没有介绍到,如 ...

  2. SpringBoot——基础配置

    基础配置 配置格式 SpringBoot提供了多种属性配置方法 application.properties server.port=80 application.yml server: port: ...

  3. 音视频入门-5-音频编码原理、编码器、ADTS格式

    1.  概念 音频压缩技术指的是对原始数字音频信号流(PCM编码)运用的数字信号处理技术. 2. 背景 和 压缩的必要性 研究发现,直接采用PCM码流进行存储和传输存在非常大的冗余度. 以CD为例,其 ...

  4. 分布式执行引擎Ray-部署

    1. Ray集群 Ray 有多种部署模式,包括单机,k8s,VM等. 在单机下,可以直接用ray.init来快速启动ray的运行环境,但是如果要在多节点上执行,则必须先部署Ray Cluster. 一 ...

  5. LeetCode 1388. Pizza With 3n Slices(3n 块披萨)(DP)

    给你一个披萨,它由 3n 块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨: 你挑选 任意 一块披萨.Alice 将会挑选你所选择的披萨逆时针方向的下一块披萨.Bob 将会挑选你所选择 ...

  6. 【VMware VCF】使用 SoS 实用程序检查 VCF 环境的运行状态以及收集组件的日志信息。

    VMware Cloud Foundation 解决方案中有一个叫 Supportability and Serviceability(SoS)可支持性和可维护性的实用程序,可能你在初始构建 VCF ...

  7. Android Qcom USB Driver学习(五)

    前面的几篇都有涉及,所以本文学习一下pmic usb charger都相关的vote机制 OVP: Over Voltage Protection 过压保护 USB_IN: Input current ...

  8. USB协议基础篇

    初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB. 一,从最常见的名词说起 1.1 什么是USB 这个我就不多解释了,直译就是通用串行总线.再不明白 ...

  9. PRT预计算辐射传输方法

    PRT(Precomputed Radiance Transfer)技术是一种用于实时渲染全局光照的方法.它通过预计算光照传输来节省时间,并能够实时重现面积光源下3D模型的全局光照效果. 由于PRT方 ...

  10. 墨天轮沙龙 | 北京大学李文杰:面向知识图谱应用的图数据库系统gStore

    在6月8日举办的[墨天轮数据库沙龙第七期-开源生态专场]中,北京大学重庆大数据研究院图数据库与知识图谱实验室副主任.北京大学王选计算机研究所全职博士后 李文杰老师分享了<面向知识图谱应用的图数据 ...